队列

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

map<int,int>name

建立一个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保有相同函数,但它内部的数据可以重复出现