| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 
 | vector,变长数组,倍增的思想size() 返回元素个数
 empty() 判断是否为空
 clear() 清空
 front()/back()
 push_back()/pop_back()
 begin()/end();
 支持比较运算
 
 
 pair<int,int> 存储一个二元组
 first,第一个元素
 second,第二个元素
 支持比较运算,以first为第一关键字,以second为第二关键字(字典排序)
 可以使用pair<int,pair<int,string>> 存储三个数
 
 string,字符串,
 substr(a,b), 返回从a开始,返回b个字符
 c_str() 返回起始地址
 size()/length()
 empty()
 clear()
 
 
 queue,队列 , queue<int> q
 size()
 empty()
 push(), 队尾插入一个元素
 front(),返回队头元素
 back(),返回队尾元素
 pop(), 弹出队头元素
 
 
 priority_queue,优先队列,默认是大根堆 priority_queue<int> heap
 push(),插入一个元素
 top(), 返回堆顶元素
 pop(); 弹出堆顶元素
 
 
 stack,栈,
 size()
 empty()
 push(), 栈顶插入一个元素
 top(),	返回栈顶元素
 pop()	弹出栈顶元素
 
 
 deque,双端队列,deque<int> q 效率低
 size() 返回元素个数
 empty() 判断是否为空
 clear() 清空
 front()/back()
 push_back()/pop_back()
 push_front()/pop_front()
 begin()/end()
 
 set,map,multiset,multimap,基于平衡二叉树(红黑树),动态维护有序序列
 size()
 empty()
 clear()
 begin()/end()
 
 set/multiset set中没有重复的数,mul可以有重复的数
 insert() 插入一个数
 find() 查找一个数
 count() 返回某一个数的个数
 erase()
 (1) 输入是一个数x,删除所有x   O(k + logn)
 (2) 输入一个迭代器,删除这个迭代器
 lower_bound()/upper_bound()
 lower_bound(x) 返回大于等于x的最小的数的迭代器
 upper_bound(x) 返回大于x的最小的数的迭代器
 map/multimap
 insert()  插入的数是一个pair
 erase()  输入的参数是pair或者迭代器
 find()
 可以像数组一样用map
 lower_bound()/upper_bound()
 
 
 unordered_set,unordered_map,unordered_multiset,unordered_multimap,哈希表
 和上面类似,增删改查时间复杂度是 O(1)
 不支持lower_bound()/upper_bound()
 
 
 bitset,压位
 bitset<10000> S;
 ~,&,|,^
 >>, <<
 ==, !=
 
 count() 返回有多少个1
 any() 判断是否至少有一个1
 none() 判断是否全是0
 
 set() 把所有位置变为1
 set(k,v) 将第k位变成v
 reset() 把所有位变为0
 flip() 等价于~
 flip(k) 把第k位取反
 
 |