优先队列(priority_queue)

优先队列(priority_queue)介绍: STL中的优先队列本质上就是基于堆实现的,所以可以实现堆的很多操作。 优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序 头文件:#include<queue> 相关函数: 和队列基本操作相同: top 访问队头元素 empty 队列是否为空 size

介绍:

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)

 

今天的文章优先队列(priority_queue)分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/55332.html

(0)
编程小号编程小号
上一篇 2023-08-28
下一篇 2023-08-28

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注