优先队列的本质其实就是一个堆,一直维护就行。

我们使用C++就可以用STL轻松实现,就不用手写堆了(是不是很方便?(✪ω✪)).

priority_queueq; 默认优先级从到大到小

priority_queue<int,vector,greater > q; 优先级从小到大

当然,我们也可以自定义排序,如下列代码,按照成绩大到小排序,如果成绩相等,就按照名字的字典序,小的排在前面。

#include<bits/stdc++.h>
using namespace std;
struct node     //定义学生成员的结构体
{
	string name;
	float score;
};
bool operator<(const node &a,const node &b)      //自定义排序,重载小于符号
{
	if(a.score==b.score)	return a.name > b.name;      //因为对小于符号进行了重载,这里符号与平时相反
	else	return a.score < b.score;      //大到小排
}
priority_queue<node>	pq;    //优先队列的定义,<>里面为优先队列元素的类型
int main()
{
	pq.push({"ar",60});     //传入数据
	pq.push({"clc",99});
	pq.push({"ph",60});
	while(!pq.empty())
	{
		cout<<pq.top().name<<' '<<pq.top().score<<endl;     //打印数据
		pq.pop();     //
	}
	return 0;
}

当然不要忘记,使用c++的优先队列需要加头文件#include<queue>,使用万能头文件的当我没说(✪ω✪)。

下面是优先队列的基本操作

pq.push(x)   //向优先队列pq里面加入x
pq.top()   //访问优先队列队首元素(优先级最高的元素)
pq.pop()  //删除优先队列队首元素
pq.empty()  //查看优先队列是否为空,如果为空返回1
pq.size()   //返回优先队列的元素个数