map容器中所有元素都是键值对,key起到索引的作用,通过key可以很快定位到实际的值;所有元素根据key值自动排序,底层结构也是二叉树。
map容器不允许有相同的key值,multimap允许有相同的key值。
1、构造与赋值
1 void printMap(const map<int, int>&m){ 2 for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++){ 3 cout << "key = " << it->first << " " << "value = " << it->second << endl; 4 } 5 } 6 void test01(){ 7 map<int, int>m;//默认构造 8 m.insert(pair<int, int>(2, 20)); 9 m.insert(pair<int, int>(1, 10)); 10 m.insert(pair<int, int>(4, 40)); 11 m.insert(pair<int, int>(3, 40)); 12 printMap(m); 13 //key = 1 value = 10 14 //key = 2 value = 20 15 //key = 3 value = 40 16 //key = 4 value = 40 17 //拷贝构造 18 map<int, int>m1(m); 19 printMap(m1); 20 map<int, int>m2; 21 //赋值 22 m2 = m1; 23 printMap(m2); 24 }
2、大小和互换
1 map<int int> m1; 2 map<int int> m2; 3 m1.insert(make_pair(1,20)); 4 m2.insert(make_pair(1,10)); 5 //容器的大小 6 m1.size(); 7 //是否为空 8 m1.empty(); 9 //交换 10 m1.swap(m2);
3、删除和插入
1 map<int, int>m; 2 //第一种插入方法 3 m.insert(pair<int, int>(1, 10)); 4 m.insert(pair<int, int>(2, 20)); 5 //第二种 6 m.insert(make_pair(3, 30)); 7 m.insert(make_pair(4, 40)); 8 printMap(m); 9 //删除第一对 10 m.erase(m.begin()); 11 m.erase(3);//按key值删除 12 m.clear(); 13 //m.erase(m.begin(), m.end()); 14 printMap(m);
4、查找和统计
1 void test05() 2 { 3 map<int, string> m; 4 m.insert(make_pair(1, "Jenny")); 5 m.insert(make_pair(2, "LiMing")); 6 m.insert(make_pair(3, "Denny")); 7 8 //查找 9 map<int, string>::iterator pos = m.find(3); 10 if (pos != m.end()) 11 { 12 cout << "key =" << (*pos).first << "value=" << (*pos).second << endl; 13 } 14 else 15 { 16 cout << "没有找到" << endl; 17 } 18 //统计 map容器不允许插入相同元素,值只能是0或者1 19 int num = m.count(3); 20 }
5、改变map排序算法
1 //仿函数 2 class mycompare{ 3 public: 4 bool operator()(int v1,int v2){ 5 return v1 > v2; 6 } 7 }; 8 9 void test02(){ 10 map<int, int ,mycompare>m; 11 m.insert(make_pair(1, 20)); 12 m.insert(pair<int, int >(2, 10)); 13 m.insert(make_pair(3, 30)); 14 for (map<int, int, mycompare>::iterator it = m.begin(); it != m.end(); it++){ 15 cout << it->first << " " << it->second << endl; 16 17 } 18 //3 30 19 //2 10 20 //1 20 21 }