常用操作一览表
| 容器 | 创建 | 增 | 删 | 查 | 遍历 | 特殊特性 | 参考链接 |
| list | |||||||
| vector | 1. vector<int> vec;
2. vector<int> vec(10, 0); // 长度10,初始值0
3. 匿名变量:vectot<int>(10, 0);
4. 多维: vector<vector<bool>> vec(10, vector<bool>(10, false)); | 1. vec.push_back(1);
2. vec.insert(vec.begin(), 1);
3. vec.insert(vec.begin(), vec2.begin(),vec2.end()); | 1. vec.pop_back();
2. vec.clear();
3. vec.erase(vec.begin());
4. vec.erase(vec.begin(), vec.begin()+5); //删除[begin, begin+5)的元素 | 1. vec.size();
2. vec.empty();
3. vec[0];
4. vec.at(0);
5. vec.front();
6. vec.back();
7. find(vec.begin(), vec.end(), 1); | 1. for(int i=0; i<vec.size(); ++i)
2. for( auto i: vec)
3. for( auto iter=vec.begin(); iter!=vec.end(); ++iter) | 1. 可以用[ ]下标访问 | 1. cppreference |
| unordered_set | 1. 自定义存储类型和hash函数 auto hash_function = [](const pair<int,int>& o) {return hash<int>()(o.first) ^ hash<int>()(o.second);}; unordered_set<pair<int,int>, decltype(hash_function)> dp(0, hash_function); | 1. for( aotu iter=us.begin(); iter!=us.end(); ++iter)
2. for( auto item: us) | 1. 自定义hash函数 | ||||
| set | 1. set<int> s; | 1. s.lower_bound(3); //找<=3的最大元素,没有则返回s.end() 2. s.upper_bound(3); //找>3的最小元素 3. *(set.begin()); | |||||
| multiset //允许有重复元素的set,其他用法同set | |||||||
| unordered_map | |||||||
| map | 1. map<char, int> m;
2. map<char, int, cmp> m; // 自定义比较函数cmp,默认操作符< key升序排序 | 1. m['a']=1; //未创建的key在访问时自动创建,初始为0
2. m.insert('a'); m['a']=1; | 1. m.clear();
2. m.erase('a');
3. m.erase(m.begin());
4. m.erase(m.begin(), m.begin()+5); | 1. m.size();
2. m.empty();
3. m['a'];
4. m.find('a'); | 1. for(auto iter=m.begin(); iter!=m.end(); ++iter) | 1.key值唯一 2.[key]访问直接新建 3.自动按key递增排序 | 1.map用法 |
| stack | 1. stack<int> s;
2.stack<pair<int, int>> sp; | 1. s.insert(1);
2.sp.emplace(1,1); //在顶部构造新元素 | |||||
| queue | 1. queue<int> q; | 1. q.push(1); | 1. q.pop(); | 1. q.front();
2. q.back(); | |||
| priority_queue | 1. priority_queue<int> qp;
2. priority_queue< pair<char, int>, vector<pair<char,int>>, cmp> qp2; // 自定义比较函数cmp,默认操作符< 降序排序 | 1. qp.push(1); | 1. pq.pop(); // 没有erase和clear | 1. qp.size();
2. qp.empty();
3. pq.top(); //这个和stack同 | 1. while(!qp.empty()){ pq.top(); pq.pop(); } | 1.值可重复 2.自动递减排序 3.只能头出尾入 | 2.pq自定义比较 |
| dequeue | 1. deque<int> dq; | 1. dp.push_back(1);
2. dq.push_front(2); | 1. dp.pop_back();
2. dq.pop_front(); | 1. dp.size();
2. dq.empty();
3. dq.front();
4. dq.back(); | 1. while(!dq.empty()){ dq.front(); dq.pop_front(); } | 1. 头尾都可出入 | 1.cppreference |
特性比较
1.map vs priority_queue<pair<>>
| map< > | priority_queue< pair< >> | |
| 排序 | 默认递增排序 默认使用less,定义< | 默认递减排序 默认使用less,定义> |
| 元素值 | key不可重复 插入重复的key会忽略后者,想要替换需要先erase原本的 | 元素可重复 |
容器选择心得

本文探讨了C++中map和priority_queue<pair<> >在常用操作和特性上的比较,提供了容器选择的心得,帮助开发者理解何时选用哪种容器更合适。
2万+

被折叠的 条评论
为什么被折叠?



