STL
[TOC]
priority_queue
大根堆(top是max)优先队列
priority_queue<int, vector<int>, greater<int>> q; // 小根堆
top
push 和 pop
empty size
emplace(1,1) // priority_queue<PII> q;
// 相当于 push({1,1})
deque
双端队列:首尾都可以插入删除
应用:二叉树层次遍历
empty()
size()
front() 和 back()
push_front(x) 和 push_back(x)
pop_front() 和 pop_back()
unordered
unordered_set, unordered_map, unordered_multiset, unordered_multimap, 哈希表
不支持 lower_bound()/upper_bound(), 迭代器的++,–
set
不允许重复,升序
erase(x) // 删除所有x或迭代器it
count()
find() // set.find(1) == set.end() 没找到
lower_bound(x) 大于等于x的最小的数的it
upper_bound(x) 大于x的最下的数的it
multiset
允许重复,升序
map
<key, value> 根据key升序,key不允许重复
find
erase(pair)
[]
lower_bound 和 upper_bound
multimap
<key, value> 根据key升序,key允许重复
bitset
bitset<10000> s;
~, &, |, ^
>>, <<
==, !=
[]
count() 返回有多少个1
any() 判断是否至少有一个1
none() 判断是否全为0
set() 把所有位置成1
set(k, v) 将第k位变成v
reset() 把所有位变成0
flip() 等价于~
flip(k) 把第k位取反
vector
支持按字典序比较运算
size
empty
clear
front 和 back
push_back 和 pop_back
insert emplace
[]
二维
vector<vector<int>> g(N,vector<int>(N,-1)); // 初始化为-1(N*N大小)
stack
top
push 和 pop
queue
front 和 back
push 和 pop
pair
升序?
unique
将序列中不重复的相邻元素(即与前一个数不同)放在前面,需要先排序
int arr[] = {3,2,2,1,4}, n = sizeof arr/ sizeof 1;
for (int a : arr) cout<<a<<' ';
// 3 2 2 1 4
sort(arr, arr+n);
// 1 2 2 3 4
n = unique(arr, arr+n) - arr;
for (int a : arr) cout<<a<<' ';
// 1 2 3 4 4
for (int i = 0; i < n; i++) cout<<arr[i]<<' ';
// 1 2 3 4
greater
sort | priority_queue | |
---|---|---|
greater | 从大到小 | 小顶堆 |
less | 从小到大 | 大顶堆 |