//STL
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
/* pair存二元组,底层是结构体
first,第一个元素
second, 第二个元素
支持比较运算,first为第一关键字,second为第二关键字(字典序
p = make_pair(10, "wwww");
p = {10, "222"};
pair<int, pair<int, int> > p;
string substr(), c_str()
size()/length() 返回字符串长度
empty()
clear()
string a = "ddd";
a += "def";
a += "c";
a.substr(起始位置, 长度) // x从x位开始,y的长度 , y > n,输出全部
printf("%s\n", a.c_str()) // 返回起始地址
queue, 队列
size()
empty()
push() 队尾插入元素
front() 返回队头
back() 返回队尾
pop() 弹出队头元素
无chear() , stack 也是
如果想清空: q = queue<int>();
priority_queue, 优先队列,默认是大根堆
push() 插入一个元素
top() 返回堆顶元素
pop() 弹出堆顶元素
// 如果想变为小根堆,直接插入-x,变为小根堆
priority_queue<int> heap;
heap.push(-x);
// 定义为小根堆
priority_queue<int, vector<int>, greater<int> > heap;
stack 栈
size()
empty()
push() 向栈顶插入元素
top() 返回栈顶
pop() 弹出栈顶
deque, 双端队列
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不重复, 集合,set中的元素不能被修改,multi存储的元素是可以重复的。
insert()插入一个数
find() 查找一个数,不存在返回end迭代器
count() 返回莫一个数的个数
erase()
(1) 输入是一个数x,删除所有x o(k + logn)
(2) 输入一个迭代器,删除这个迭代器
lower_bound(x) 返回大于等于x的最小的数的迭代器
upper_bound(x) 返回大于x的最小的数的迭代器
map/multimap 存入的是映射, 键值对, multi存储的元素是可以重复的。
insert() 插入的数是pair
erase() 输入的参数是pair或迭代器
find()
[] 时间复杂度是 o(logn)
lower_bound()
upper_bound()
map迭代
for (auto e : m)
{
cout << "<" << e.first << "," << e.second << ">" << " ";
}
unordered_set,unordered_map, unordered_multiset, unordered_multimap哈希表
和上面类似,增删改查的时间复杂度是O(1)
不支持lower_bound,upper_bound(), 迭代器的++,--
bitset, 压位
bitset<10000> s; 10000的bitset
~, &, |, ^
>>, <<
==, !=
[]
count()
any() 判断是否至少有一个1
none() 判断是否全为0
set(),所有位置乘1
set(k, v) 将第k位变v
reset() 所有位变0
flip() == ~ 取反
flip(k) 第k位取反
*/
int main()
{
// vector<int> a;
// for (int i = 0; i < 10; i ++ ) a.push_back(i);
// for (int i = 0; i < a.size(); i ++ ) cout << a[i] << ' ';
// cout << endl;
// // a.begin() == a[0], a.end() == a[a.size()]
// for (vector<int>::iterator i = a.begin(); i != a.end(); i ++ ) cout << *i << ' ';
// for (auto i = a.begin(); i != a.end(); i ++ ) cout << *i << ' ';
// cout << endl;
// for (auto x : a) cout << x << ' ';
// cout << endl;
// // 支持比较运算,字典序比较
// vector<int> b(4, 3), c(3, 4);
// if (a < b) puts("a < b");
// pair<int, PII> p;
// p = {10, {1, 2} };
// cout << p.x << ' ' << p.y.x << ' ' << p.y.y << endl;
map<string, int> a;
a["wwww"] = 1;
cout << a["wwww"] << endl;
return 0;
}