一、stack
s.push(): 向栈内压入一个成员;
s.pop(): 从栈顶弹出一个成员;
s.empty(): 如果栈为空返回true,否则返回false;
s.top(): 返回栈顶,但不删除成员;
s.size(): 返回栈内元素的大小;
二、queue
s.back() 返回队尾元素
s.empty() 如果队列空则返回真
s.front() 返回队首元素
s.pop() 删除队首元素
s.push() 在队尾加入一个元素
s.size() 返回队列中元素的个数
s.emplace(args) 由args构造
三、priority_queue
q.empty() 如果队列为空,则返回true,否则返回false
q.size() 返回队列中元素的个数
q.pop() 删除队具有最高优先级的元素值,但不返回其值
q.top() 返回具有最高优先级的元素值,但不删除该元素
q.push(item) 在基于优先级的适当位置插入新元素
1. priority_queue允许用户为队列中元素设置优先级,放置元素的时候不是直接放到队尾,而是放置到比它优先级低的元素前面,标准库默认使用<操作符来确定优先级关系。
2. priority_queue模板类有三个模板参数:元素类型,容器类型,比较算子。其中后两个可以省略,默认容器为vector,默认算子为less,即如果x<y判断为真,则y排到x前面,y先出队。
定义priority_queue对象的示例代码如下
priority_queue<int> q1
priority_queue<pair<int,int>> q2;
priority_queue<int, vector<int>, greater<int>> q3;//定义优先级小的先出队
#include<iostream>
#include<queue>
#include<functional>
using namespace std;int main()
{priority_queue<int, vector<int>, greater<int> > que;for (int i = 0; i < 9; ++i)que.push(i);while (!que.empty()){cout << que.top() << " ";que.pop();}return 0;
}
输出结果:
、
#include<iostream>
#include<queue>
using namespace std;
struct node
{int x, y;friend bool operator < (node a, node b) //标准库默认使用 < 来确认它们的关系,换成>就不行了哦{return a.y > b.y; // >表示越小越优先,<表示越大越优先}
};
priority_queue<node> que;int main()
{node v;for (int i = 0; i < 10; i++){v.x = i;v.y = 10 - i;que.push(v);}while (!que.empty()){cout << que.top().x << "," << que.top().y << endl;que.pop();}system("pause");return 0;
}
输出结果: