queue:
- 相关头文件:
#include <queue>
#include <assert.h>
- 先进先出
queue<int> q;
1、特殊位置表示
- q.front();显示第一个元素
- q.back();显示最后一个元素
- q.push(val);入队
- q.emplace(v1,v2,...);效果同push,但是根据相应类型自动构造。
- q.pop();出队
- q.empty();
- q.size();
2、似乎就没有了......
priority_queue:
priority_queue< type, container, function >
优先队列,默认大的在前面,相当于大顶堆。
- type:数据类型;
- container:实现优先队列的底层容器;
- function:元素之间的比较方式;
priority_queue<int,vector<int>,greater<int>> q;
上面这个队列,就是小的在前面了。
优先队列构造的后两个元素可以省略,对于container,必须是数组形式实现的容器,例如vector、deque,而不能使list。
优先队列除了把queue中q.front(),q.back()换成q.top()之外,与queue无异。但元素排列是按照元素值大小排序的。
priority_queue<pii,vector<pair<string,int>>,greater<pair<string,int>>> pq;
pq.push(make_pair("aaa",5));
pq.push(make_pair("aab",6));
pq.push(make_pair("aba",4));
pq.push(make_pair("aaa",5));
pq.push(make_pair("aaa",4));
pq.push(make_pair("aaa",6));
cout<<pq.top().first<<" "<< pq.top().second<<endl;
//aaa 4
另外可以自定义插入时的比较函数:
auto cmp = [](const pair<string, int>& a, const pair<string, int>& b) {
return a.second == b.second ? a.first < b.first : a.second > b.second;
};
priority_queue< pair<string, int>, vector<pair<string, int>> , decltype(cmp) > que(cmp);
stack:
头文件:
#include <stack>
stack<int> s;
- s.top();显示第一个元素
- s.push(val);入栈
- s.pop();出栈
- s.empty();
- s.size();
- stack不可遍历;
-
s.emplace可以直接传入构造对象需要的元素,然后自己调用其构造函数;
using PII = pair<int, int>; stack<PII> s; s.emplace(1,2);