优先队列(priority_queue)
介绍:
STL中的优先队列本质上就是基于堆实现的,所以可以实现堆的很多操作。
优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序
头文件:#include<queue>
相关函数:
和队列基本操作相同:
- top 访问队头元素
- empty 队列是否为空
- size 返回队列内元素个数
- push 插入元素到队尾 (并排序)
- pop 删除队头元素
声明队列:
(1)优先队列默认是从大到小(大根堆):
priority_queue<int> q3;//默认大根堆(降序)
(2)若想实现一个小根堆,升序排列,则可这样写:
priority_queue<int,vector<int>,greater<int> > q1;//升序队列,即小根堆
(3)同样的,这种写法等价于(1):
priority_queue<int,vector<int>,less<int> > q2;//降序队列,即大根堆
代码实例:
#include<queue>
#include<iostream>
using namespace std;
priority_queue<int,vector<int>,greater<int> > q1;//升序队列,即小根堆
priority_queue<int,vector<int>,less<int> > q2;//降序队列,即大根堆
priority_queue<int> q3;//默认大根堆(降序)
int x,y,z,n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>x>>y>>z;
q1.push(x);
q2.push(y);
q3.push(z);//push()插入元素;
}
while(!q1.empty()&&!q2.empty()&&!q3.empty()){//empty()判断是否为空
int a,b,c;
a=q1.top();//top()取堆顶(队首)
q1.pop();//pop删除堆顶
b=q2.top();
q2.pop();
c=q3.top();
q3.pop();
cout<<"size:"<<q1.size()<<endl;
cout<<a<<"\n"<<b<<"\n"<<c<<"\n";
}
return 0;
}
输出如下:
本文作者:小坦js
本文链接:https://www.cnblogs.com/xiaotan-js/p/16644818.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步