priority_queue(优先队列)的简单构造与用法

  

priority_queue

  priority_queue 优先队列,其底层是用堆来实现的。在优先队列中,队首元素一定是当前队列中优先级最高的那一个。

  在优先队列中,没有 front() 函数与 back() 函数,而只能通过 top() 函数来访问队首元素(也可称为堆顶元素),也就是优先级最高的元素。

一、基本数据类型的优先级设置

  1. 此处指的基本数据类型就是 int 型,double 型,char 型等可以直接使用的数据类型,优先队列对他们的优先级设置一般是数字大的优先级高,因此队首元素就是优先队列内元素最大的那个(如果是 char 型,则是字典序最大的)。
//下面两种优先队列的定义是等价的priority_queue<int> q;priority_queue<int,vector<int>,less<int> >;//后面有一个空格

  其中第二个参数( vector ),是来承载底层数据结构堆的容器,第三个参数( less ),则是一个比较类,less 表示数字大的优先级高,而 greater 表示数字小的优先级高

如果想让优先队列总是把最小的元素放在队首,只需进行如下的定义:

priority_queue<int,vector<int>,greater<int> >q;

示例代码:

void test1(){//默认情况下,数值大的在队首位置(降序)priority_queue<int> q;for(int i  = 0;i <= 10;i ++)q.push(i);while(!q.empty()){cout<<q.top()<<" ";q.pop();}cout<<endl;//greater<int>表示数值小的优先级越大priority_queue<int,vector<int>,greater<int> > Q;for(int i  = 0;i <= 10;i ++)Q.push(i);while(!Q.empty()){cout<<Q.top()<<" ";Q.pop();}}

二、结构体的优先级设置

1.方式一:重载运算符 ‘<’

  可以在结构体内部重载 ‘<’,改变小于号的功能(例如把他重载为大于号)

struct student{int grade;string name;//重载运算符,grade 值高的优先级大friend operator < (student s1,student s2){return s1.grade < s2.grade;}};

示例代码:

void test2(){priority_queue<student> q;student s1,s2,s3;s1.grade = 90;s1.name = "Tom";s2.grade = 80;s2.name = "Jerry";s3.grade = 100;s3.name = "Kevin";q.push(s1);q.push(s2);q.push(s3);while(!q.empty()){cout<<q.top().name<<":"<<q.top().grade<<endl;q.pop();} }/*结果:Kevin:100Tom:90Jerry:80*/

2.方式二:把重载的函数写在结构体外面

  将比较函数写在结构体外面,作为参数传给优先队列。

struct fruit{string name;int price;};struct cmp{// "<" 表示 price 大的优先级高bool operator() (fruit f1,fruit f2){return f1.price < f2.price;}};

示例代码:

void test3(){priority_queue<fruit,vector<fruit>,cmp> q;fruit f1,f2,f3;f1.name = "apple";f1.price = 5;f2.name = "banana";f2.price = 6;f3.name = "pear";f3.price = 7;q.push(f1);q.push(f2);q.push(f3);while(!q.empty()){cout<<q.top().name<<":"<<q.top().price<<endl;q.pop();}}/*结果:pear:7banana:6apple:5*/

  


原博客链接:https://blog.csdn.net/pzhu_cg_csdn/article/details/79166858

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

局域网服务器文件夹隐藏,局域网服务器共享文件夹访问权限设置win7隐藏无权限共享文件夹方法.docx...

局域网服务器共享文件夹访问权限设置win7隐藏无权限共享文件夹方法??局域网服务器共享文件夹访问权限设置、win7隐藏无权限共享文件夹的方法在局域网文件管理中&#xff0c;文件服务器共享文件的管理一直是当前网络管理的重要工作。尤其是很多单位的服务器共享文件常常是单位…

关于时间复杂度(持续更新.....)

数据范围小于100W的&#xff08;1e6&#xff09;&#xff0c;nlogn是1000w左右&#xff0c;可以卡时。 数据范围小于1000的&#xff0c;勉强可以o(n^2)。 数据范围1000W左右的(1e7)&#xff0c;只能考虑o(n)或者o(logn) 数据范围大于1000W的&#xff08;1e7&#xff09;&…

三星电视出现服务器未响应,三星电视遥控器失灵怎么办

feng1054592015-09-26 23:22解决办法一&#xff1a;(三星电视用户专用)1、检查遥控器到三星电视机接收位置中间是否有障碍物&#xff1b;2、在同一房间使用无线路由器、手机等设备的无线功能&#xff0c;可能会干扰红外信号的发送与接收&#xff1b;3、对遥控器进行复位操作&am…

sdut 2074 区间覆盖问题(贪心)

区间覆盖问题Time Limit: 1000MS Memory limit: 65536K题目描述用i来表示x坐标轴上坐标为[i-1&#xff0c;i]的长度为1的区间&#xff0c;并给出n&#xff08;1≤M≤200&#xff09;个不同的整数&#xff0c;表示n个这样的区间。现在要求画m条线段覆盖住所有的区间&#xff0c;…

http协议与服务器通信,iPhone应用用HTTP协议和服务器通信

iPhone应用用HTTP协议和服务器通信是本文要介绍的内容&#xff0c;主要是来学习iphone应用中的通信协议&#xff0c;具体内容来看本文详解。iPhone用http协议和服务器通信有两种方式&#xff0c;一种是同步一种是异步的&#xff0c;所谓同步是指当客户端调用post/get的方式的函…

[sicily]【1001】 会议安排(田忌赛马类贪心)

题干&#xff1a; N个会议要同时举行&#xff0c;参会人数分别为A[0], A[1], ...,A[N-1]. 现有M个会议室&#xff0c;会议室可容纳人数分别为B[0], B[1], ...,B[M-1]. 当A[i]<B[j]时&#xff0c;可以把会议i安排在会议室j&#xff0c;每间会议室最多安排一个会议&#xff0c…

设备怎样开启位置服务器,开启设备服务器

开启设备服务器 内容精选换一换购买Windows弹性云服务器后&#xff0c;通过MSTSC远程连接&#xff0c;发现没有声音。通过MSTSC远程连接的Windows弹性云服务器如何播放音频&#xff1f;本节内容适用于Windows Server 2008 R2、Windows Server 2016系统的弹性云服务器。Windows弹…

高端又易学的vbs表白程序了解一下

第一个、 打开txt文件&#xff0c;复制以下代码粘贴进去&#xff08;可以修改中文部分&#xff0c;其它代码不要动&#xff01;&#xff09;。保存并关闭txt文件。 msgbox("做我女朋友好吗&#xff1f;") msgbox("房产证上写你名字") msgbox("保大&qu…

离散化处理 模板

离散化模板&#xff1a; #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int maxn100000; int a[maxn]; int b[maxn]; int n,m; void lisan(); int main() {cin>>n;//元素个数for(int i1;i<n;i) {scanf(&qu…

cf#401(Div. 2)B. Game of Credit Card(田忌赛马类贪心)

题干&#xff1a;After the fourth season Sherlock and Moriary have realized the whole foolishness of the battle between them and decided to continue their competitions in peaceful game of Credit Cards. Rules of this game are simple: each player bring his fa…

NYOJ-14 会场安排问题(经典贪心,区间完全不覆盖模板)

附另一&#xff1a;此类问题选题总结&#xff1a;https://blog.csdn.net/qq_41289920/article/details/81001357 题干&#xff1a; 会场安排问题时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述学校的小礼堂每天都会有许多活动&#xff0c;有…

可以使用田忌赛马类贪心问题的前提(或说 如何判断题目符合田忌赛马类贪心问题)

前提就是&#xff0c;首先&#xff0c;需要两个数组&#xff01;&#xff01;两个数组&#xff01;&#xff01;两个数组&#xff01;&#xff01;才可以考虑这个&#xff01; 其次&#xff0c;A和B这两个数组的个数是相同的。也正因为如此&#xff0c;所以从大到小排序或者从小…

【nyoj 270】数的分解(统计因子模板)

题干&#xff1a; 数的分解时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;1描述你的任务是找到一个最小的正整数Q&#xff0c;使Q的各位数的乘积等于N。输入最多450组测试数据。数据以EOF结尾。输入一个整数N&#xff08;0 ≤ N ≤ 400)。输出…

asp.net mvc 地址栏传输信息报错:window.location.pathname

asp.net mvc 地址栏传输信息报错&#xff1a;window.location.pathname 前端cshtml代码内容 代码片. // 页面跳转 window.location.pathname /Home/Index?cc123;“/”应用程序中的服务器错误 从客户端(?)中检测到有潜在危险的 Request.Path 值。 如何解决 web.config中添…

区间覆盖全部类型及部分精选习题汇总详解(贪心策略)

内容如下&#xff1a; 1&#xff09;区间完全覆盖问题 问题描述&#xff1a;给定一个长度为m的区间&#xff0c;再给出n条线段的起点和终点&#xff08;注意这里是闭区间&#xff09;&#xff0c;求最少使用多少条线段可以将整个区间完全覆盖 样例&#xff1a; 区间长度8&#…

数据库提示:正在还原中,无法访问 应该怎么办?

Sql语句 restore database 数据库名 with recovery

数据库工具一段时间后打开报错:远程过程调用失败0x800706be

1.原因可能是安装vs时自带更高版本的sql server服务造成的&#xff0c;只需要卸载Microsoft SQL Server 2012 Express LocalDB或 Microsoft SQL Server 2012 LocalDB就行了 2.先安装vs工具&#xff0c;然后安装数据库工具

【POJ - 1328】Radar Installation(贪心+计算几何)安装雷达辐射岛屿

题干&#xff1a;Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea side. And any radar installation, locating on the coasting, can only cover d distance, so …

sql语句实现分页查询

2005及以上版本 -- 分页查询&#xff08;通用型&#xff09; select top pageSize * from (select row_number() over(order by sno asc) as rownumber,* from student) temp_row where rownumber>((pageIndex-1)*pageSize);2012及以上版本 select * from student orde…

【51nod-1289】大鱼吃小鱼

题干&#xff1a; 有N条鱼每条鱼的位置及大小均不同&#xff0c;他们沿着X轴游动&#xff0c;有的向左&#xff0c;有的向右。游动的速度是一样的&#xff0c;两条鱼相遇大鱼会吃掉小鱼。从左到右给出每条鱼的大小和游动的方向&#xff08;0表示向左&#xff0c;1表示向右&…