stl-priority_queue 优先队列

news2024/12/22 23:54:01

目录

​编辑优先队列

头文件:#include《queue》;即可

访问:只能访问队首.top()

添加。push(元素),按优先级排列

删除。pop(),删除队首元素(堆顶)

删除​编辑 

判空。empty()

元素个数。size()

 优先级设置:

定义语句调节

结构体调节:

结构体内部+第一中定义(短)

结构体外部+第二中定义(长)

引用

用途

​编辑 

 


 

优先队列

与入队顺序无关,只与优先级有关,优先级最高的在队首。

头文件:#include《queue》;即可

访问:只能访问队首.top()

乍一看,和set一样,但是set支持随机访问,pq只能访问队首(最值),set全局排序,pq只找出max or min

和queue还挺不一样的,queue是front,不能用top 

添加。push(元素),按优先级排列

删除。pop(),删除队首元素(堆顶)

删除 

判空。empty()

元素个数。size()

 优先级设置:

定义语句调节

最大元素在队首:

priority_queue<int> pq;
priority_queue<int,vector<int>,less<int>> pq; 

最小元素在队首 :

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

 

结构体调节:

这段代码总是报错。。。 

结构体内部+第一中定义(短)

利用友元函数bool重载小于号【如果要二级排序也可以自定义】

#include <cstdio>
#include <queue>
#include <vector> 
#include <set> 
#include <string>
#include <iostream>
#include <map>
using namespace std;
//priority_queue<int> pq;
struct fruit
{int price;string name;
//构造函数写在结构体内部
//fruit(int price,string name)
//{price=price;name=name;
// } 

//定义友元函数
friend bool operator < (friut f1,fruit f2)
{return f1.price<f2.price;
 } 
};

priority_queue<fruit> pq; 


int main()
{
//	fruit
//pq.push(fruit(5,"pear"));
//pq.push(fruit(4,"apple"));  
//pq.push(fruit(6,"cherries")); 
//cout<<pq.top();

 

}

这TM有区别吗???? 

破案了,fruit拼错了……,感谢智谱清言 

 这之后创建优先队列的时候,不能这样

 而是

 

priority_queue<fruit> pq; 

 这是一段代码示例,由于重载时return>,所以数字小的在前面,最终输出的是四块钱的苹果

#include <cstdio>
#include <queue>
#include <vector> 
#include <set> 
#include <string>
#include <iostream>
#include <map>
using namespace std;
//priority_queue<int> pq;
struct fruit
{
string name;
int price;


 
 //构造函数写在结构体内部
fruit(int price1,string name1)
{price=price1;name=name1;
//这里不能参数和结构体同名,不然算不对 
 } 

//定义友元函数
friend bool operator < (fruit f1,fruit f2)
{return f1.price >f2.price ;
	}	
};

priority_queue<fruit> pq; 


int main()
{
//	fruit
pq.push(fruit(5,"pear"));
pq.push(fruit(4,"apple"));  
pq.push(fruit(6,"cherries")); 
cout<<pq.top().name;

 

}

 与cmp相反,优先队列

如果值一样,优先不动队首元素 

结构体外部+第二中定义(长)

 

#include <cstdio>
#include <queue>
#include <vector> 
#include <set> 
#include <string>
#include <iostream>
#include <map>
using namespace std;
//priority_queue<int> pq;
struct fruit
{
string name;
int price;


 
 //构造函数写在结构体内部
fruit(int price1,string name1)
{price=price1;name=name1;
//这里不能参数和结构体同名,不然算不对 
 } 
//
定义友元函数
//friend bool operator < (fruit f1,fruit f2)
//{return f1.price >f2.price ;
//	}	
};
struct cmp_of_fruit
{
bool operator () (fruit f1,fruit f2)
{if(f1.price!=f2.price)return f1.price>f2.price;//便宜的优先 
else return f1.name<f2.name; //首字母靠后的优先 
 } 
};

priority_queue<fruit,vector<fruit>,cmp_of_fruit> pq; 


int main()
{
//	fruit
pq.push(fruit(5,"pear"));
pq.push(fruit(4,"apple"));  
pq.push(fruit(4,"cherries")); 
cout<<pq.top().name;

 

}

引用

可以加引用提高效率:我只加了两个&&,代码依旧。

#include <cstdio>
#include <queue>
#include <vector> 
#include <set> 
#include <string>
#include <iostream>
#include <map>
using namespace std;
//priority_queue<int> pq;
struct fruit
{
string name;
int price;


 
 //构造函数写在结构体内部
fruit(int price1,string name1)
{price=price1;name=name1;
//这里不能参数和结构体同名,不然算不对 
 } 
//
定义友元函数
//friend bool operator < (fruit f1,fruit f2)
//{return f1.price >f2.price ;
//	}	
};
struct cmp_of_fruit
{
bool operator () (fruit &f1,fruit &f2)
{if(f1.price!=f2.price)return f1.price>f2.price;//便宜的优先 
else return f1.name<f2.name; //首字母靠后的优先 
 } 
};

priority_queue<fruit,vector<fruit>,cmp_of_fruit> pq; 


int main()
{
//	fruit
pq.push(fruit(5,"pear"));
pq.push(fruit(4,"apple"));  
pq.push(fruit(4,"cherries")); 
cout<<pq.top().name;

 

}

用途

 

 

 

 

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

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

相关文章

嵌入式初学-C语言-八

#接嵌入式初学-C语言-七# 分支结构 分支结构&#xff1a;又被称之为选择结构 选择结构的形式 多分支 语法&#xff1a; if(条件1) { 语句1; } else if(条件2) { 语句2; } ... else { 语句n1; }案例&#xff1a; #include <stdio.h> int main() { // 需求&#xff…

采购订单打开单据时表格行设置颜色

文章目录 采购订单打开单据时表格行根据条件显示背景色Python实现插件实现创建项目创建类&#xff0c;实现接口重写方法编译后挂载插件到表单插件启动开发环境进行测试单元格设置背景色行背景色 采购订单打开单据时表格行根据条件显示背景色 Python实现 import clr clr.AddR…

VitualBox虚拟机重启后配置无法保存,已安装软件变为没有安装

VitualBox虚拟机重启后虚拟机还原为上次开机的状态&#xff0c;安装的安装包配置啥的全部丢失。 按网上的配置了半天也没解决。最终用下面讨巧的办法&#xff0c;即不重启虚拟机。 我们不在重启虚拟机&#xff0c;那我们想关闭虚拟机的时候怎么办呢&#xff1f; 1、按下图所…

104 二叉树的最大深度

解题思路&#xff1a; \qquad 最大深度可以想到使用DFS(深度优先)或BFS(广度优先)来解决。 \qquad DFS&#xff1a;一般用 递归 or 迭代栈。递归实现较为简单。 \qquad BFS&#xff1a;一般用 迭代队列。 DFS&#xff1a; \qquad 对于每个节点&#xff0c;将左子树的最大深…

二进制搭建 Kubernetes v1.20(上)

目录 一、操作系统初始化配置 二、升级Liunx内核 三、部署docker引擎 四、部署etcd集群 五、部署Master组件 六、部署Worker Node组件 hostnameip需要部署k8s集群master0120.0.0.100kube-apiserver kube-controller-manager kube-scheduler etcdk8s集群master0220.0.0.1…

小阿轩yx-部署 KVM 虚拟化平台

小阿轩yx-部署 KVM 虚拟化平台 案例前置知识点 KVM 自 Linux 2.6.20 版本之后就直接整合到 Linux 内核依托 CPU 虚拟化指令&#xff08;如Intel-VT、AMD-V&#xff09;实现高性能的虚拟化支持与 Linux 内核高度整合&#xff0c;在性能、安全性、兼容性、稳定性上都有很好的表…

11day-C++list容器使用

这里写目录标题 1. list的介绍及使用1.1 list的介绍1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 list的迭代器失效 2. list的模拟实现2.1 list的反向迭代器 1. list的介绍及使用 1.1 list的介绍 list的…

Teamcenter用本地胖客户端启动时,可以看到插件的菜单项,但是用Eclipse启动时看不到

用本地胖客户端启动时&#xff0c;可以看到定制包的插件菜单项&#xff0c;但是用Eclipse启动时&#xff0c;看不到&#xff1f; 原因&#xff1a; 是因为Eclipse启动下&#xff0c;是采用 JAVA1.8 来运行的。但是本机的胖客户端是采用JAVA 11来运行的 解决办法&#xff1a;…

二,SSM 搭建环境:持久化层

二&#xff0c;SSM 搭建环境&#xff1a;持久化层 文章目录 二&#xff0c;SSM 搭建环境&#xff1a;持久化层物理建模&#xff1a;创建对应的 数据库和数据表Mybatis 逆向工程 的配置设置执行逆向生成资源归位(逆行生成的内容&#xff0c;移动到对应模块的包当中去)移动&#…

Hive-内部表和外部表

区别 内部表实例 准备数据 查看数据 删除数据 外部表实例 准备数据 查看数据 删除数据 区别 内部表&#xff1a;管理元数据&#xff08;记录数据的文件和目录的信息&#xff09;和数据。当删除内部表时&#xff0c;会删除数据和表的元数据&#xff0c;所以当多个表关…

Creo protoolkit 二次开发(三) 遍历模型的特征

一、特征概念 Creo是基于特征的参数化建模&#xff0c;在模型树上的每个项目都是特征。 模型主要由各类特征构成。以零件模型为例&#xff0c;其基本特征包括基准特征、拉伸特征、孔特征、倒圆角特征、旋转特征、曲面特征、切口特征、阵列特征和扫描特征等。这些特征的叠加形成…

angular入门基础教程(七)系统路由

路由的实现 当我们系统越来复杂&#xff0c;功能越来越多&#xff0c;路由也就是必须的了。在 ng 中如何实现路由呢&#xff1f; 启用路由 在 app 目录下&#xff0c;新建一个 router 目录&#xff0c;把 app.routers.ts 文件拷贝过来&#xff0c;并修改一下。 import { Ro…

【数据结构】链式二叉树的实现和思路分析及二叉树OJ

【数据结构】链式二叉树的实现和思路分析及二叉树OJ &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;数据结构 文章目录 【数据结构】链式二叉树的实现和思路分析及二叉树OJ前言一.链式二叉树的定义及结构二.链式二叉树的遍历2.1前序遍历2.2中…

《LeetCode热题100》---<双指针篇四道②>

本篇博客讲解LeetCode热题100道双指针篇中的 第三道&#xff1a;三数之和&#xff08;中等&#xff09; 第四道&#xff1a;接雨水&#xff08;困难&#xff09; 第三道&#xff1a;三数之和&#xff08;中等&#xff09; 法一&#xff1a;暴力枚举&#xff08;三重循环&#x…

Java学习Day18:基础篇8

多态 基本信息&#xff1a; 应用场景&#xff1a; 可以把子类对象赋值给父类对象&#xff0c;实现多态从而使用同一种方法&#xff1b; 多态中调用成员的特点 1.调用成员变量都看左边 调用成员变量:编译看左边&#xff0c;运行也看左边 编译看左边: javac编译代码的时候&a…

【BSV生态亮点】体育进入区块链时代:波兰奥委会与Zetly建立战略伙伴关系

​​发表时间&#xff1a;2024年7月18日 波兰奥运委员会和Zetly宣布正式建立战略伙伴关系。这一合作是波兰将现代技术、数字资产和创新解决方案整合到波兰体育中的重要一步&#xff0c;将把波兰体育产业带入数字时代。 Zetly是一个非常活跃的数字平台&#xff0c;它将体育与区…

3.6.锚框

锚框 ​ 13.4. 锚框 — 动手学深度学习 2.0.0 documentation (d2l.ai) ​ 一类目标检测算法是基于锚框的&#xff0c;步骤如下&#xff1a; ​ 使用多个被称为锚框的区域(边缘框)&#xff0c;预测每个锚框里是否含有关注的物体&#xff0c;如果有&#xff0c;则预测从这个锚…

双指针-【3,4,5,6,7,8】

第三题&#xff1a;快乐数 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/happy-number/算法思想&#xff1a; 1.每个…

jdk版本管理利器-sdkman

1.什么是sdkman&#xff1f; sdkman是一个轻量级、支持多平台的开源开发工具管理器&#xff0c;可以通过它安装任意主流发行版本&#xff08;例如OpenJDK、Kona、GraalVM等等&#xff09;的任意版本的JDK。通过下面的命令可以轻易安装sdkman: 2.安装 curl -s "https://…

IFM易福门LR3000LR3300液位传感器操作说明

IFM易福门LR3000LR3300液位传感器操作说明