1. string container
Please click to jump to this chapter
2. vector container
Please click to jump to this chapter
3. deque container
Please click to jump to this chapter
4. stack container
Please click to jump to this chapter
5. queue container
Please click to jump to this chapter
6. list container
Please click to jump to this chapter
7. set/multiset container
Please click to jump to this chapter
8. map/multimap container
8.1 basic concept of map
Introduction:
- All elements in the map are pair
- The first element in pair is key, which serves as an index; The second element is value (real value)
- All elements are automatically sorted according to the key value of the element
Essence:
- map/multimap is an associative container, and its underlying structure is implemented by binary tree
advantage:
- You can quickly find the value value according to the key value
Difference between map and multimap:
- Duplicate values are not allowed in the map element container
- multimap allows duplicate key value elements in the container
8.2 map construction and assignment
Function Description:
- Construct and assign the map container
Function prototype:
- map(T1, T2) mp;// Default constructor
- map(const map &mp);// copy constructor
- map& operator=(const map& mp);// Assignment: overloading the equal sign operator
void printMap(map<int, int>&m) { for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) { cout << "key = " << (*it).first << " value = " << it->second << endl; } cout << endl; } void test01() { //Create map container map<int, int>m; //Insert (must be in group) m.insert(pair<int, int>(1, 10)); m.insert(pair<int, int>(2, 20)); m.insert(pair<int, int>(4, 40)); m.insert(pair<int, int>(3, 30)); printMap(m);//It will be sorted automatically according to the key value from small to large //copy construction map<int, int>m2(m); //assignment map<int, int>m3; m3 = m2; }
All elements in the map appear in pairs, and pairs should be used when inserting. Syntax of group: pair < data type 1, data type 2 > (Assignment 1, assignment 2);
8.3 map size and swap
Function Description:
- Count the size of the map container and exchange the map container
Function prototype:
- empty();// Determine whether the container is empty
- size();// Returns the number of elements in the container
- swap(st);// Swap two collection containers
8.4 map insertion and deletion
Function Description:
- Insert and delete the map container
Function prototype:
- insert(elem);// Insert element in container
- clear();// Clear all elements in the container
- erase(pos);// Delete the data indicated by the POS iterator and return the iterator of the next element
- erase(beg, end);// Delete the element of the [beg, end) interval and return the iterator of the next element
- erase(key);// Delete the element with key in the container
//Create map container map<int, int>m; //Different methods of insertion (the first two are recommended) m.insert(pair<int, int>(1, 10)); m.insert(make_pair(2, 20)); m.insert(map<int, int>::value_type(3, 30)); m[4] = 40; //delete m.erase(m.begin()); m.erase(3);//Delete the value with key 3
If the size of the container is 4, but use the command cout < < m [5] < < endl; Then the compiler will automatically generate a pair group with a key of 5 and a value of 0, so it is not recommended to insert in this way, but you can use the key to access the value.
8.5 map search and statistics
Function Description:
- Search the map container for data and statistics
Function prototype:
- find(key);// Check whether the key exists, and if so, return the iterator of the element of the key; If it does not exist, return set end()
- count(key);// Count the number of key elements
map does not allow to insert duplicate key s, even if the value s are different; multimap allows insertion
8.6 map container sorting
Function Description:
- The default sorting rule of map container is to sort from small to large according to the key value, but the sorting rule can be changed
Main technical points:
- Using the imitation function, the sorting rules can be changed
class MyCompare { public: bool operator()(int v1, int v2)const { //Descending order return v1 > v2; } }; void test01() { map<int, int, MyCompare>m; m.insert(make_pair(1, 10)); m.insert(make_pair(2, 20)); m.insert(make_pair(3, 30)); m.insert(make_pair(4, 40)); m.insert(make_pair(5, 50)); for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) { cout << "key = " << (*it).first << " value = " << it->second << endl; } }
8.7 case - employee grouping
Case description:
- Today, the company recruited 10 employees (ABCDEFGHIJ). After 10 employees enter the company, which department should they be assigned to work in
- Employee information includes: name and salary composition; The part is divided into: planning, art and R & D
- Randomly assign department and salary to 10 employees
- Insert information through multimap, key (department number) and value (employee)
- Display employee information by Department
[to be continued]