引言

priority_queue 也是一种队列,queue 有的性质和操作它也有(但是没有back操作了),唯一不同就是它可以自动排序
它的本质是通过堆实现的,在堆排序中会见到它,下面说一下它的用法;

基本内容

头文件#include<queue>
定义priority_queue<Type, Container, Functional>
Type就是该队列的数据类型Container是保存数据的容器类型,且该容器必须由数组实现的,默认情况是vector;Functional可以简单理解为数据的比较方法


默认情况下只需要传入数据类型就可以,容器类型默认为 vector, 数据的比较方法默认为大顶堆(即从大到小排列)
priority_queue<int> q1; 等价于 priority_queue<int, vector<int>, less<int>> q2;

注:这里面数据比较方法用到了仿函数less<int>,不了解仿函数的可以看看这篇文章:内建函数对象(STL)
不使用仿函数还可以自己写比较规则,只需要重载运算符 < 就可以了(比较方式默认用operator<),这里就不提了;

大顶堆

大顶堆可以理解为优先输出大的数据,也是priority_queue的默认情况;
这里的Functionalless<int>了;
测试代码:

#include<iostream>
#include<vector>
#include<queue>
using namespace std;int main() {//默认情况priority_queue<int> q1;q1.push(1);q1.push(4);q1.push(3);q1.push(5);q1.push(2);q1.push(8); while (!q1.empty()) {cout << q1.top() << " ";q1.pop();}cout << endl;//下列和默认情况等价priority_queue<int, vector<int>, less<int>> q2;q2.push(1);q2.push(4);q2.push(3);q2.push(5);q2.push(2);q2.push(8); while (!q2.empty()) {cout << q2.top() << " ";q2.pop();}cout << endl;return 0;
}

压入队列的数为:1 4 3 5 2 8
输出结果:

可以看出是从大到小排列的;

小顶堆

小顶堆可以理解为优先输出小的数据
所以这里面Functional就需要用greater<int>了;
测试代码:

#include<iostream>
#include<vector>
#include<queue>
using namespace std;int main() {priority_queue<int, vector<int>, greater<int>> q1;q1.push(1);q1.push(4);q1.push(3);q1.push(5);q1.push(2);q1.push(8);while (!q1.empty()) {cout << q1.top() << " ";q1.pop();}cout << endl;return 0;
}

压入队列的数为:1 4 3 5 2 8
输出结果:

可以看出是从小到大排列的;

总结

再次声明以下使用priority_queue的几点:

  • priority_queue没有back()操作
  • priority_queue参数容器类型是由数组实现的
  • 默认priority_queue是大顶堆(从大到小)
  • less是从大到小,greater是从小到大,一定不要弄混!!!!

STL中的priority_queue(优先队列)相关推荐

  1. stl中Priority Queues(优先队列)的基本用法

    博客搬家啦 blog.ma6174.com stl中Priority Queues(优先队列)的基本用法 C++优先队列类似队列, 但是在这个数据结构中的元素按照一定的断言排列有序. C++ Prio ...

  2. [C++STL教程]7.priority_queue优先队列入门学习!零基础都能听懂的教程

    不知不觉C++STL教程系列已经第7期了.之前我们介绍过:vector, queue, stack, set, map等等数据结构. 今天我们来学习一个新的stl容器:priority_queue优先 ...

  3. C++ STL中的优先队列(priority_queue)使用

    原文:https://www.cnblogs.com/cielosun/p/5654595.html 今天讲一讲优先队列(priority_queue),实际上,它的本质就是一个heap,我从STL中 ...

  4. 浅谈C++ STL中的优先队列(priority_queue)

    2019独角兽企业重金招聘Python工程师标准>>> 从我以前的博文能看出来,我是一个队列爱好者,很多并不是一定需要用队列实现的算法我也会采用队列实现,主要是由于队列和人的直觉思维 ...

  5. STL关于queue(队列)与priority_queue(优先队列)的一些笔记

    queue queue就是队列, 在STL中主要实现了一个先进先出的容器 使用queue应该先添加头文件#include<queue> queue<typename>name; ...

  6. STL中的栈结构和队列结构

    队列和栈都是线性结构,但他们都是受限的线性表,即他们的操作是线性表操作的子集,利用线性表作为栈和队列类的基类会大大减轻编程工作量,提高代码的重用性 栈结构--------头文件为<stack&g ...

  7. 理解stl中的erase

    vector<Path *> vec; vec.push_back(new Path); vec.erase(vec.begin()); vector<Path > vec; ...

  8. stl中各种容器的自定义比较函数

    class elem { public:elem();elem(int aa):a(aa){} public:int a;int getA(){return a;} };class elem1 { p ...

  9. priority_queue优先队列的使用方法

    说到优先队列,大家肯定想到了队列(这肯定是对于学过队列的同学来说,当然了,没学过也没事,对于本篇文章没什么问题滴),队列的特征是后进后出,按照排队先来后到的顺序的,本篇文章介绍的priority_qu ...

最新文章

  1. (转)小小的研究了一下linux下的”注册表“ gconf-editor
  2. svm中支持向量的理解
  3. 多元统计分析最短距离法_多元统计分析重点
  4. SQL2012 附加数据库提示5120错误解决方法
  5. python大数据招聘信息_2017招聘大数据丨Python需求增速达174%,AI人才缺口超百万!...
  6. python elementtree 命名空间_用Python中的命名空间通过‘ElementTree’解析XML
  7. [jzoj NOIP2018模拟11.02]
  8. python 判断闰年
  9. 改善客户服务体验的 5 种方法
  10. direct 3d 渲染红蓝立体效果
  11. Asp.net 周旭龙 系列总结
  12. 计算机开机后黑屏鼠标显示桌面图标,win10系统电脑启动开机黑屏不显示只有鼠标图标的处理办法...
  13. SECURITY:加密与解密,AIDE入侵检测系统,扫面与抓包
  14. 自由谈:为什么使用 Linux
  15. Web 开发技术文档大全
  16. POI生成Excel
  17. Apache Solr7.4 入门教程
  18. 阿里妈妈广告预测线上0.082+baseline,特征部分
  19. Excel无法打开,内存或磁盘空间不足,Microsoft Excel无法再次打开或保存任何文档
  20. (附源码)计算机毕业设计SSM酒店入住管理系统

热门文章

  1. 中国移动、联通、电信、第三方平台IDC市场机房布局之争
  2. Anaconda :利用Anaconda Prompt (Anaconda3)建立、设计不同python版本及对应库函数环境之详细攻略
  3. ML之LiRDNNEL:基于skflow的LiR、DNN、sklearn的RF对Boston(波士顿房价)数据集进行回归预测(房价)
  4. CV:利用cv2+dlib库自带frontal_face_detector(人脸征检测器)实现人脸检测与人脸标记之《极限男人帮》和《NBA全明星球员》
  5. Py:python利用easygui实现最简单GUI带你学习区块链技术的发展和由来
  6. 安裝TA-Lib到想要罵髒話
  7. 本地化ASPXPivotGrid控件
  8. Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)【转】...
  9. [最短路]tvvj1031 热浪
  10. 记一种验证日期格式的正则表达式