优先队列(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;
}

输出如下:

 

posted @ 2022-08-31 22:42  小坦js  阅读(493)  评论(0)    收藏  举报