介绍:
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;
}
输出如下:
今天的文章优先队列(priority_queue)分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/55332.html