STL库中的优先队列
priority_queue是一个优先队列,优先级高的最先出队,默认最大值优先。内部实现为堆,因此出队和入队的时间复杂度均为O(logn)。可以自定义优先级控制出队顺序优先队列不支持删除堆中指定元素,只可以删除堆顶。需要引入头文件#include<queue>。
成员函数:
push(x):入队;
pop():出队;(把优先级最高的出队!)
top():取队头元素;
size():返回队中元素个数;
empty():判队空,若为空返回true;
priority_queue<int, vector<int> , cmp >que;
其中,第一个参数为数据类型,第二个参数为容器类型,第三个参数为比较函数。后两个参数根据需要也可以省略。
优先队列最常用的用法:priority_queue<int> que;//参数为数据类型,默认优先级(最大值优先)
有4种方法可以实现优先级控制:
1.使用C++自带的库函数<functional>。
2.有3种自定义优先级的方式。
一.使用C++自带的库函数<functional>,引用#include<functional>
equal_to<Type>//等于,Type为数据类型
not_equal_to<Type>//不等于
greater<Type>//大于
greater_equal<Type>//大于等于
less<Type>//小于
less_equal<Type>//小于等于
例:priority_queue<int,vector<int>, less<int> >que1;//最大值优先
注意“>>”会被认为错误,“>>”是右移运算符,注意用空格隔开。
priority_queue<int,vector<int>,greater<int> >que2;//最小值优先
二.
1.队列元素为数值型
struct cmpl {bool operator ()(int &a,int &b)//自定义操作符{return a<b;//最大值优先,a>b表示最小值优先} };
创建优先队列:priority_queue<int,vector<int>,cmpl>que3,//最大值优先
2.队列元素为结构体型,运算符重载写在结构体内,参数只需要一个。
struct node1 {int x,y;//结构体中的成员bool operator<(const node1 &a) const {return x<a.x;} };
注意这里有点不一样:上图中表示最大值优先,x>a.x;才表示最小值优先
创建优先队列:priority_queue<node1>que5;//使用时要把数据定义为node1类型
3.队列元素为结构体型,运算符重载写在结构体内外,参数需要两个。
struct node3 {int x,y;//结构体中的成员 };bool operator <(const node3 &a, const node3 &b)//在结构体外面定义 {return a.x<b.x;//按成员x最大值优先 }
代码解释:重载<操作符,意思是如果a.x< b.x成立,那么结构体node3 a <node3 b成立。由于优先队列是按照从大到小排列,所以结构体b会排列到a之前,因为b.x是最大的,所以实现了按照x的从大到小排序
创建优先队列:priority_queue<node3>que7;//使用时要把数据定义为node3类型
STL库中的优先队列相关推荐
- C++11 中STL库中新增内容
C++ 11一个比较显著的变化是以前boost库中的一些函数被正式标准化合入到STL中了,本文就简单的介绍一下. 引用包装器(Reference Wrapper) 当模板函数参数为泛型类型的时候,无法 ...
- STL库中string类内存布局的探究
在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...
- C++STL库中不可或缺的部分—string(模拟实现)
前文 大家好,本篇文章主要是讲解一下 string一些常用接口的模拟实现. 众所周知,在日常生活中,字符串无处不在,如 ''just do it'',''中国'',''一坤年''等,想要在计算机上将这 ...
- C++STL库中的map容器
map简介 map是STL中的一个关联式的容器,可以建立key(first)和value(second)一对一的联系,由key映射到value. map内部自建了一棵红黑二叉树,可以对数据进行自动排序 ...
- c++ stl库中begin()和end()的区别
c.begin(); 返回指向容器最开始位置数据的指针 c.end(); 返回指向容器最后一个数据单元+1的指针 如果我们要输出最后一个元素的值应该是 *( ...
- 给不会调用C++STL库中二分函数lower_bound,upper_bound,binary_search同学的一些话!
lower_bound算法返回第一个大于等于给定值所在的位置.设置两个指针start和last,其中start指向数组的起始位置,last指向数组末尾位置之后的位置.当start和last指向相同位置 ...
- SDNUOJ 1703.字谜|STL库中map的使用/map映射
题目 Description 输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本的另外一个单词.在判断是否满足条件时,字母不分大小写,但在输出时应保留输入的大小写.满足条件 ...
- 简单实现STL库中的容器vector
一.简要说明 本篇博客实现的容器仅仅可存放任意基本数据类型的元素,但是还没有实现容器可存放容器类型的元素(类似于多维数组). 二.代码实现 2.1 数组声明 #define INCREASEMENT ...
- stl库的使用——队列queue和优先队列和优先队列小根堆(全家桶哎)
其实实现队列蛮简单的,但敌不过人懒~ 于是stl库中就有了专门实现队列的函数#include<queue> 这里讲解下queue常用的几个操作 1.q.push(),向队列中插入元素 2. ...
最新文章
- java 如何解密_java加密与解密
- Idea之使用Gradle开发Java项目
- vsftpd的配置文件路径,是在哪里指定的?
- 一个功能函数所具备的要素
- C语言结构体-大小,对齐,填充,使用及其他
- LeetCode每日一题: 最后一个单词的长度(No.58)
- 编辑bpmn_「业务架构」BPMN简介第四部分-数据和工件
- 微信又可以发520红包,还新增情人节“撒狗粮”状态:律师提醒注意
- Linux查找(find)指令的使用
- 数据分析学习笔记—python简单操作EXCEL
- 《Skype for Business Server 2015-项目实战》
- 苹果真伪查询_拆解报告:山寨版苹果AirPods Pro
- word 此文件来自其它计算机,问题解决: 此文件来自其他计算机,可能被阻止以帮助保护该计算机/WORD在试图打开文件时遇到错误……...
- SonarLint: Replace the type specification in this constructor call with the diamond operator (“<>“).
- 偶数c语言中怎么写,偶数怎么写
- 卷积神经网络中感受野的详细介绍
- MongoDB for Java Programmer ——2
- HTML / CSS 实践练习
- AUTO_ACKNOWLEDGE和CLIENT_ACKNOWLEDGE
- 看视频可以倍速播放的(主流播放器都可以)
热门文章
- 基于RFID技术在服装智慧门店中的应用-rfid服装盘点
- python保存变量为csv_python excel存储为csv
- 计算机语言---机器语言、汇编语言、高级语言
- 森林怎么训练野人_森林游戏如何驯服野人
- matlab 求函数绝对值,概率密度函数估计matlab命令 A a abs 绝对值、(4)
- 实时互动RTI技术,生成式AI虚拟数字人,构建元宇宙基础设施,CloudXR开启元宇宙通道...
- ug圆柱凸轮槽展开公式matlab,基于UG与MATLAB的圆柱凸轮曲线槽设计
- win7电脑重装系统教程u盘重装步骤,电脑使用u盘安装win7的方法
- 水果之王猕猴桃之系列八(猕猴桃的营养诉说)
- Tomcat启动后出现乱码