一、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.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;//定义优先级小的先出队
1. 测试代码
#include<iostream> #include<queue> #include<functional> using namespace std; int main() { priority_queue<int, vector<int>, greater<int> > que; ; i < ; ++i) que.push(i); while (!que.empty()) { cout << que.top() << " "; que.pop(); } ; }
输出结果:
2. 测试代码
#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; ; i < ; i++) { v.x = i; v.y = - i; que.push(v); } while (!que.empty()) { cout << que.top().x << "," << que.top().y << endl; que.pop(); } system("pause"); ; }
输出结果: