STL部分
<set>/<multiset>
支持插入一个元素,删除指定key值的元素,查找指定key值的元素,返回最大/小值,找前驱,找后继,返回指定key值的相同元素个数。
部分代替平衡树中一些操作。不能updata或push_down之类的操作,也不能找第K大等。
set的cmp可以自己写,这给我们带来了不少方便。
*如果在set中按key1比较是有序的,且key2也是有序的。此时我们要找指定key2时就可以在cmp函数中人工设置一个开关来解决。也就是说set中的查找要保证key是有序的。如NOI2007cash一题。
<map>/<multimap>
与set不同之处在于map是一个映射,可以知道指定key值的一个映射(数据)。
在时间要求不是很苛刻的情况下,可以代替Hash。如记忆化搜索。
可以代替链表,即动态开空间。如AC自动机中son。
可以嵌套数据结构。如map套set。
<stack>栈
<queue>队列
<deque>双端队列
<vector>/<list>
类似于线性表一样的东西。
很大一个好处是内存是动态的。
一些线性表基本操作
如果数据是线性有序的,就可以二分。
Lower_bound(S,T,key):找第一个大于等于key的。
upper_bound(S,T,key):找第一个大于key的。
当然也可以这么干
upper_bound(S,T,key)-1:找第一个小于等于key的。
Lower_bound(S,T,key)-1:找第一个小于key的。
binary_search(S,T,key):判断关键字为key的是否存在。
Reverse(S,T):翻转
Unique(S,T):去重
min_element:返回最大
max_element:返回最小
next_permutation:下一个排列
prev_permutation:上一个排列
random_shuffle:随机生成一个元素的排列
其他
<complex>
虚数的使用。