STL

N 人看过

[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 从小到大 大顶堆