0、pair[HTML_REMOVED] 二元组
pair<T1,T2> p;
P.first
p.second
支持比较运算,排序时,以第一个为关键字,相同比较第二个
1、 vector 变长数组,倍增思想
int size()
bool empty()
clear() 清空
front()/back()
push_back() pop_back()
begin()/end()
支持随机迭代器,随机寻址[]
2、string 字符串 ,stl封装的字符数组
size()
empty()
clear() 清空字符串
substr(start, len);// 第一个是起始位置,默认从0开始,第二个参数是截取长度,可缺省第二个,就是从起始位置截取到末尾
c_str() // 返回对应字符数组的起始地址
int find(int start) // 从左往右,以start为起点查找
int rfind(int start) // 从右往左,以start为起点查找
replace
3、队列 queue
push(e)
front() 队头
back() 队尾
pop()
4、堆(优先队列,默认大根堆):priority_queue
push()
top()
pop()
5、stack(栈)
push()
top()
pop()
6、deque (双端队列)
size()
front()
back()
push_back()
pop_back()
push_front()
pop_front()
7、set和multiset
set中没有重复元素,如果插入重复元素,则会忽略
multiset中可以有重复元素
set/multiset
insert() 插入一个数 o(logn)
find(x) 查找一个数 o(1)
count(x) 返回x的个数
erase(e)
(1) 输入是一个数,删除所有x o(k + logn)
(2) 输入一个迭代器,删除这个迭代器
lower_bound()/ upper_bound()
lower_bound 返回 >= x的最小的数
upper_bound 返回 <= x的最大的数
平衡二叉树(红黑树
8、map和multimap
insert(pair<T1,T2>) o(logn)
erase (x) 输入参数或者迭代器x
map[key] = val; 可以像数组用map
如果直接访问没有,则会创建。
支持lower_bound()/upper_bound()
9、哈希表:unordered_set, unordered_map, unordered_multiset,unordered_multimap
与上类似,增删改查时间的复杂度是o(1)
不支持lower_bound()/upper_bound()
与排序相关的操作都不支持
10、位存储:bitset(位图)
每一位相当于一个bool变量,节省内存
bitset<多少位> s;
~,^,&,|,^
>>,<<
==、!=
[] 取到某一位
count() 返回有多少个1
any/none()
any() 判断是否至少有一个1
none() 是否全为0
set() 所有位置置为1
set(k, v) k位变为v
reset() 所有位置变为0
flip() 等价于~
flip(k) 把第k位取反
谢谢你的总结
hh不客气~