vector
size() 返回元素个数
empty() 返回是否为空
clear() 清空
front() / back()
push_back() / pop_back()
begin() / end()
支持比较运算
访问:和数组一样 / 迭代器
pair
pair<int,int> pii;
pii.first 取第一个元素
pii.second 取第二个元素
支持比较运算 以first为第一关键字(字典序)
构造pair make_pair(10,"sds");
也可以存储三个元素 pair<int,pair<int,int>> p;
string
size()
empty()
clear()
substr(idx,len) 返回子串
substr(idx) 返回从idx开始知道末尾的整个子串
支持直接拼接
queue
size()
empty()
push() 向队尾插入一个元素
back() / front() 返回队尾元素 返回对头元素
pop() 弹出对头元素
没有clear()
priority_queue 优先队列 是堆 默认大根堆
size()
empty()
push() 插入一个元素
top() 返回堆顶元素
pop() 弹出堆顶元素
//如果要定义小根堆 方法一:可以再插入时插入-x
heap.push(-x);
//方法二:定义时多加两个参数 --变成小根堆
priority_queue<int,vecotr<int>,greater<int>> heap1;
stack 栈
size()
empty()
push() 向栈顶插入一个元素
top() 返回栈顶元素
pop() 弹出栈顶元素
deque 双端队列
size()
empty()
front()
back()
push_back() / pop_back()
push_front() / pop_front()
begin() / end()
set 不可以有重复元素 基于平衡二叉树(红黑树)
multiset 可以有重复元素
size()
empty()
begin() / end()
insert() 插入一个数
find() 查找一个数,若不存在返回end迭代器
count( ) 返回某个数的个数
erase() :
输入一个数x 删除所有x O(k+logn)
输入是一个迭代器 删除这个迭代器
lower_bound() 返回大于等于x的最小的数的迭代器
upper_bound() 返回大于x的最小的数的迭代器
增删改查时间复杂度O(logn)
map 基于平衡二叉树(红黑树)
multimap
size()
empty()
begin() / end()
insert() 插入的是一个pair
erase() : 输入的参数是pair 或 迭代器
输入一个数x 删除所有x O(k+logn)
输入是一个迭代器 删除这个迭代器
find()
可以类似于数组一样用map / multimap O(logn)
lower_bound()
upper_bound()
增删改查时间复杂度O(logn)
unordered_set unordered_map
unordered_multiset unordered_multimap 哈希表
和上面类似,增删改查时间复杂度O(1)
不支持 lower_bound() / upper_bound()
不支持迭代器的 ++ / –
bitset 压位
bitset<1000> s;// <>里面的是长度
~s
& | ^
>> <<
== !=
[] //取出某一位
count() 返回有多少个1
any() 判断是否至少有一个1
none() 判断是否全为0
set() 把所有为置1
set(k,v) 将第k位变为1
reset() 把所有位变为0
flip() 等价于~ 取反
flup(k) 第k位取反
学长nb!!!!!!
如果能加上每个操作的时间复杂度,感觉就更完美了( ̄▽ ̄)~*