优先队列

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

我们使用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()   //返回优先队列的元素个数
全部评论

相关推荐

鼠鼠第一次实习,啥也不懂一直是自己一个人吃的饭,不会做工作老是被嫌弃,大人的世界是这样的吗?
我是星星我会发亮:好的mt有两种,一种愿意教你的,一种几乎什么活都不给你派让你很闲允许你做自己事情的
点赞 评论 收藏
分享
白火同学:大二有这水平很牛了,可以适当对关键信息加粗一点,比如关键技术、性能指标之类的。
点赞 评论 收藏
分享
能干的三文鱼刷了100道题:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务