bitset
bitset<N> bs; //创建 N 位的 bitset
bs.set(); //将整个 bitset 设置成 true
bs.set(pos, val); //将第 pos 位改成 val
deque
deque <int> q; //创建一个元素为 int 型的 deque
q.empty(); //判断是否为空
q.push_back(); //容器末尾插入元素
q.push_front(); //容器开头插入元素
q.pop_back(); //容器末尾元素弹出
q.pop_front(); //容器开头元素弹出
map
map<int, int> mp; //创建一个下标为 int 类型, 元素为 int 类型的 map
mp.empty(); //判断是否为空
mp.clear(); //清空 map
mp.insert(k); //插入元素 k
mp.erase(k); //删除 k
mp[i] = k; //直接将 i 的值改成 k
for (map <int, int> :: iterator iter = mp.begin(); iter != mp.end(); iter++) cout << iter->second << "\n"; //遍历 mp 中每一个元素
for (auto &x : mp) cout << x.second << "\n"; //遍历 mp 中每一个元素
multiset
multiset <int> s; //创建一个空的 multiset 容器,multiset 可以保留重复元素,且默认保持升序
s.erase(x); //删除 x
s.erase(it); //删除 it 指向的元素
s.insert(x); //向 multiset 中加入元素 x
s.lower_bound(x); //查找第一个小于等于 x 的下标的位置,没有的话就指向 s.end()
pair
pair <int, int> p; //构建空 pair, 下标为 int, 内容为 int
pair <int, int> p[maxn]; //构建长度为 maxn 的 pair
priority_queue
priority_queue<type, vector<type>, cmp> q;
/*
构建空的优先队列
type为数据类型
一般STL默认容器是vector
cmp是比较函数,没有的话,默认大根堆,降序排列,即less<int>,升序排序是greater<int>
自定义排序
struct cmp{
bool operator () (node & a, node & b){
if (a.x == b.x) return a.p < b.p;
return a.x > b.x;
}
};
*/
q.empty(); //判断队列是否为空
q.size(); //返回容器中的元素个数
q.push(); //将元素压入队列
q.top(); //访问队首元素
q.pop(); //弹出队首元素
queue
//FIFO:first in first out
queue <int> q; //创建一个元素为 int 型的 queue
q.empty(); //判断队列是否为空
q.size(); //返回队列中元素个数
q.push(); //将值压入队尾,入队
q.pop(); //删除队首的值,出队
q.back(); //返回队尾的值
q.front(); //返回队首的值
set
set <int> s; //创建一个元素为 int 型的 set
s.count(x); //计算 set 中 x 的数量
s.find(x); //判断 set 中是否存在 x,返回下标,不存在返回 s.end()
s.empty(); //判断 set 是否为空
s.size(); //返回 set 的长度
s.insert(); //尾部插入一个元素
s.lower_bound(x); //返回第一个大于等于 x 的数的位置
stack
//FILO : first in last out
stack <int> s; //创建一个元素为 int 型的 stack
s.empty(); //判断栈是否为空
s.size(); //返回栈中元素个数
s.push(); //压栈,将值加入栈
s.pop(); //出栈
s.top(); //返回栈顶的元素
vector
vector <int> v; //创建一个元素为 int 型的 vector
v.claer(); //清空
v.empty(); //判断 vector 是否为空
v.size(); //返回元素个数
v.back(); //返回最后一个值
v.front(); //返回第一个值
v.push_back(); //在最后插入一个值
v.pop_back(); //删除最后一个元素
find(a,b,c); //在 a 到 b 范围中找 c,返回位置,否则返回-1??
for(vector<int>::iterator it = a.begin(); it < a.end(); it++) b.push_back(*it); //遍历 a 中的元素
for(auto x : v) cout << x << "\n"; //遍历 v 中的元素
ps:
1. 使用 STL 的时候要考虑容器为空时可能出现的情况
2. set 和 multiset 自带的 lower_bound() 是 O(logn),而 algorithm 的 lower_bound() 对容器使用时为 O(n)