队列
queue<int> name; name.front()访问对头 name.push(a)入队 name.pop()出队 name.empty()队列为空返回true name.size()返回队列大小
|
双端队列
deque<int>name; name.front()访问对头 name.back()访问队尾 name.push_front(a)对头入队 name.push_back(a)队尾出队 name.pop_front()对头出队 name.pop_back()队尾出队 name.empty()队列为空返回true name.size()返回队列大小
|
优先队列(堆)
priority_queue<int>name;默认大根堆 priority_queue<int,vector<int>,greater<int>>name小根堆 priority_queue<int,vector<int>,less<int>>name大根堆 name.top()访问对头 name.pop()出队 name.empty()队列为空返回true name.size()返回队列大小
|
快速排序
sort(array + 1, array + 1 + n)
|
将数组下标[1,n]排序,默认升序
关于排序关键字
可以用pair按第一个元素为关键字排序
二元组pair
pair<typename,typename> name; name.first访问第一个元素 name.second访问第二个元素
|
或是用结构体重载运算符
struct typename { int a, b, c; bool operator < (const typename name) const { return a < name.a;//以a为关键字升序排序 } }
|
同样适用于优先队列
Hash
建立一个int对int的映射,一般可以直接当成数组用
name.insert(make_pair(a, b))插入 name.count(a)返回某个值为a的个数 name.begin()返回头部迭代器 name.end()返回尾部迭代器 name.clear()清空map
|
map的遍历
map<int, int>::iterator iter; iter = m.begin(); while (iter != m.end()) { cout << iter->first << " " << iter->second; iter++; }
|
map保持了内部数据有序(红黑树),所以时间可能会带个log
所以如果不需要满足数据有序的话,用unordered_map会更快一些
数组
vector<int> name name.push_back()再末尾插入一个数 访问就直接像数组那样访问就行 遍历可以用迭代器,也可以直接循环 name.erase(name.begin + i)删除第i个元素 name.clear()清空数组
|
平衡树
set内部数据保持有序
set name
name.begin()返回set容器的第一个元素 name.end()返回set容器的最后一个元素 name.clear()删除set容器中的所有的元素 name.empty()判断set容器是否为空 name.size()返回当前set容器中的元素个数 name.count()返回某个值的出现次数
|
mutiset与set保有相同函数,但它内部的数据可以重复出现