map以键值对的形式存储数据,且插入的元素自动排序,底层一般采用红黑树的结构。
基本用法
#include <iostream> #include <map> using namespace std; /* insert() 插入元素,当key相同时,插入失败 [] = xxx 直接插入,key相同就覆盖 xxx = yyy[] key存在就获取value并赋值,key不存在就插入,value为0 erase() 删除元素 find() 查找key是否存在 size() 获取元素个数 empty() 判断map是否为空 */ int main() { map<int, int> m; m.insert(pair<int, int>(1, 11)); m.insert(pair<int, int>(3, 33)); m.insert(pair<int, int>(2, 22)); m[3] = 3333; // 覆盖 for(map<int, int>::iterator it = m.begin(); it != m.end(); ++it) { cout << it->first << " : " << it->second << endl; } map<int, int>::iterator it1 = m.find(1); if(it1 != m.end()) { cout << "Find" << endl; } else { cout << "Not Find" << endl; } m.erase(it1); for(map<int, int>::iterator it = m.begin(); it != m.end(); ++it) { cout << it->first << " : " << it->second << endl; } return 0; }
[]形式访问的坑
#include <iostream> #include <map> using namespace std; int main() { map<int, int> m; m.insert(pair<int, int>(1, 11)); m.insert(pair<int, int>(3, 33)); m.insert(pair<int, int>(2, 22)); int v = m[4]; // key为4的数据不存在,因此会自动插入key为4,value为0的数据 for(map<int, int>::iterator it = m.begin(); it != m.end(); ++it) { cout << it->first << " : " << it->second << endl; } while(1); return 0; }
遍历删除 (不同于vectot和list)
#include <iostream> #include <map> using namespace std; int main() { map<int, int> m; m.insert(pair<int, int>(1, 11)); m.insert(pair<int, int>(3, 33)); m.insert(pair<int, int>(2, 22)); for(map<int, int>::iterator it = m.begin(); it != m.end();) { if(3 == it->first) { // m.erase(it); 在执行m.erase(it)之后,it这个iterator已经失效了 m.erase(it++); // 先把it赋值给一个临时变量传递给erase,然后it自增,就可以指向下一个 } else { ++it; } } for(map<int, int>::iterator it = m.begin(); it != m.end(); ++it) { cout << it->first << " : " << it->second << endl; } return 0; }