pair / tuple
pair<int,int> p = {1, 2};
p.first; p.second;
make_pair(1, 2);
set / multiset
有序,去重(set),$O(\log n)$ 插入删除。
set<int> s;
s.insert(x); s.erase(x); s.count(x);
for (int x : s) { }
map
map<string, int> mp;
mp["key"]++;
if (mp.count("key")) { }
需要更快哈希:C++11 起 unordered_map(均摊 O(1))。
priority_queue(堆)
priority_queue<int> pq; // 大根堆
priority_queue<int, vector<int>, greater<int>> pq; // 小根堆
pq.push(x); pq.top(); pq.pop();
stack / queue / deque
stack<int> st;
queue<int> q;
deque<int> dq; // 双端队列,单调队列常用