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库中的优先队列相关推荐

  1. C++11 中STL库中新增内容

    C++ 11一个比较显著的变化是以前boost库中的一些函数被正式标准化合入到STL中了,本文就简单的介绍一下. 引用包装器(Reference Wrapper) 当模板函数参数为泛型类型的时候,无法 ...

  2. STL库中string类内存布局的探究

    在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...

  3. C++STL库中不可或缺的部分—string(模拟实现)

    前文 大家好,本篇文章主要是讲解一下 string一些常用接口的模拟实现. 众所周知,在日常生活中,字符串无处不在,如 ''just do it'',''中国'',''一坤年''等,想要在计算机上将这 ...

  4. C++STL库中的map容器

    map简介 map是STL中的一个关联式的容器,可以建立key(first)和value(second)一对一的联系,由key映射到value. map内部自建了一棵红黑二叉树,可以对数据进行自动排序 ...

  5. c++ stl库中begin()和end()的区别

    c.begin();           返回指向容器最开始位置数据的指针 c.end();             返回指向容器最后一个数据单元+1的指针 如果我们要输出最后一个元素的值应该是 *( ...

  6. 给不会调用C++STL库中二分函数lower_bound,upper_bound,binary_search同学的一些话!

    lower_bound算法返回第一个大于等于给定值所在的位置.设置两个指针start和last,其中start指向数组的起始位置,last指向数组末尾位置之后的位置.当start和last指向相同位置 ...

  7. SDNUOJ 1703.字谜|STL库中map的使用/map映射

    题目 Description 输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本的另外一个单词.在判断是否满足条件时,字母不分大小写,但在输出时应保留输入的大小写.满足条件 ...

  8. 简单实现STL库中的容器vector

    一.简要说明 本篇博客实现的容器仅仅可存放任意基本数据类型的元素,但是还没有实现容器可存放容器类型的元素(类似于多维数组). 二.代码实现 2.1 数组声明 #define INCREASEMENT ...

  9. stl库的使用——队列queue和优先队列和优先队列小根堆(全家桶哎)

    其实实现队列蛮简单的,但敌不过人懒~ 于是stl库中就有了专门实现队列的函数#include<queue> 这里讲解下queue常用的几个操作 1.q.push(),向队列中插入元素 2. ...

最新文章

  1. java 如何解密_java加密与解密
  2. Idea之使用Gradle开发Java项目
  3. vsftpd的配置文件路径,是在哪里指定的?
  4. 一个功能函数所具备的要素
  5. C语言结构体-大小,对齐,填充,使用及其他
  6. LeetCode每日一题: 最后一个单词的长度(No.58)
  7. 编辑bpmn_「业务架构」BPMN简介第四部分-数据和工件
  8. 微信又可以发520红包,还新增情人节“撒狗粮”状态:律师提醒注意
  9. Linux查找(find)指令的使用
  10. 数据分析学习笔记—python简单操作EXCEL
  11. 《Skype for Business Server 2015-项目实战》
  12. 苹果真伪查询_拆解报告:山寨版苹果AirPods Pro
  13. word 此文件来自其它计算机,问题解决: 此文件来自其他计算机,可能被阻止以帮助保护该计算机/WORD在试图打开文件时遇到错误……...
  14. SonarLint: Replace the type specification in this constructor call with the diamond operator (“<>“).
  15. 偶数c语言中怎么写,偶数怎么写
  16. 卷积神经网络中感受野的详细介绍
  17. MongoDB for Java Programmer ——2
  18. HTML / CSS 实践练习
  19. AUTO_ACKNOWLEDGE和CLIENT_ACKNOWLEDGE
  20. 看视频可以倍速播放的(主流播放器都可以)

热门文章

  1. 基于RFID技术在服装智慧门店中的应用-rfid服装盘点
  2. python保存变量为csv_python excel存储为csv
  3. 计算机语言---机器语言、汇编语言、高级语言
  4. 森林怎么训练野人_森林游戏如何驯服野人
  5. matlab 求函数绝对值,概率密度函数估计matlab命令 A a abs 绝对值、(4)
  6. 实时互动RTI技术,生成式AI虚拟数字人,构建元宇宙基础设施,CloudXR开启元宇宙通道...
  7. ug圆柱凸轮槽展开公式matlab,基于UG与MATLAB的圆柱凸轮曲线槽设计
  8. win7电脑重装系统教程u盘重装步骤,电脑使用u盘安装win7的方法
  9. 水果之王猕猴桃之系列八(猕猴桃的营养诉说)
  10. Tomcat启动后出现乱码