下面是一份 C++ STL 常用容器的速查表,覆盖刷题中最常用的操作:


vector(动态数组)

#include <vector>
vector<int> v;
操作代码说明
尾部插入v.push_back(x)O(1) 均摊
尾部删除v.pop_back()O(1)
获取长度v.size()O(1)
判空v.empty()返回 bool
下标访问v[i]O(1)
访问首/尾v.front() / v.back()
清空v.clear()
排序sort(v.begin(), v.end())升序
降序排序sort(v.begin(), v.end(), greater<int>())
遍历for (int x : v)

set(集合,自动去重+升序)

#include <set>
set<int> s;
操作代码说明
插入s.insert(x)O(log n)
删除s.erase(x)按值删除
查找s.count(x)返回 0 或 1
查找s.find(x)返回迭代器,找不到返回 s.end()
获取长度s.size()
判空s.empty()
最小元素*s.begin()
最大元素*s.rbegin()
遍历for (int x : s)自动升序
降序定义set<int, greater<int>> s;插入后自动降序

map(键值对,按键升序)

#include <map>
map<string, int> m;
操作代码说明
插入/修改m["key"] = 1键不存在会自动创建
查找m.count("key")返回 0 或 1
查找m.find("key")返回迭代器
删除m.erase("key")
获取长度m.size()
遍历for (auto p : m)p.first 是键,p.second 是值

queue(队列,先进先出)

#include <queue>
queue<int> q;
操作代码说明
入队q.push(x)从队尾加入
出队q.pop()从队头弹出
队头元素q.front()
获取长度q.size()
判空q.empty()

stack(栈,后进先出)

#include <stack>
stack<int> st;
操作代码说明
入栈st.push(x)从栈顶压入
出栈st.pop()弹出栈顶
栈顶元素st.top()
获取长度st.size()
判空st.empty()

priority_queue(优先队列/堆)

#include <queue>
priority_queue<int> pq; // 默认大顶堆
操作代码说明
入堆pq.push(x)O(log n)
出堆pq.pop()弹出堆顶
堆顶元素pq.top()最大值(大顶堆)
判空pq.empty()
小顶堆定义priority_queue<int, vector<int>, greater<int>> pq;堆顶为最小值

常用算法函数

#include <algorithm>
功能代码
排序sort(v.begin(), v.end())
反转reverse(v.begin(), v.end())
查找最小值*min_element(v.begin(), v.end())
查找最大值*max_element(v.begin(), v.end())
二分查找binary_search(v.begin(), v.end(), x)
去重(需先排序)v.erase(unique(v.begin(), v.end()), v.end())
交换swap(a, b)
填充fill(v.begin(), v.end(), 0)

刷题选择指南

需求选哪个
需要按下标随机访问vector
需要自动去重+排序set
需要键值对映射map
先进先出(BFS)queue
后进先出(DFS/括号匹配)stack
每次取最大/最小值priority_queue

更多推荐