STL中的priority_queue(优先队列)
引言
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的默认情况;
这里的Functional是less<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(优先队列)相关推荐
- stl中Priority Queues(优先队列)的基本用法
博客搬家啦 blog.ma6174.com stl中Priority Queues(优先队列)的基本用法 C++优先队列类似队列, 但是在这个数据结构中的元素按照一定的断言排列有序. C++ Prio ...
- [C++STL教程]7.priority_queue优先队列入门学习!零基础都能听懂的教程
不知不觉C++STL教程系列已经第7期了.之前我们介绍过:vector, queue, stack, set, map等等数据结构. 今天我们来学习一个新的stl容器:priority_queue优先 ...
- C++ STL中的优先队列(priority_queue)使用
原文:https://www.cnblogs.com/cielosun/p/5654595.html 今天讲一讲优先队列(priority_queue),实际上,它的本质就是一个heap,我从STL中 ...
- 浅谈C++ STL中的优先队列(priority_queue)
2019独角兽企业重金招聘Python工程师标准>>> 从我以前的博文能看出来,我是一个队列爱好者,很多并不是一定需要用队列实现的算法我也会采用队列实现,主要是由于队列和人的直觉思维 ...
- STL关于queue(队列)与priority_queue(优先队列)的一些笔记
queue queue就是队列, 在STL中主要实现了一个先进先出的容器 使用queue应该先添加头文件#include<queue> queue<typename>name; ...
- STL中的栈结构和队列结构
队列和栈都是线性结构,但他们都是受限的线性表,即他们的操作是线性表操作的子集,利用线性表作为栈和队列类的基类会大大减轻编程工作量,提高代码的重用性 栈结构--------头文件为<stack&g ...
- 理解stl中的erase
vector<Path *> vec; vec.push_back(new Path); vec.erase(vec.begin()); vector<Path > vec; ...
- stl中各种容器的自定义比较函数
class elem { public:elem();elem(int aa):a(aa){} public:int a;int getA(){return a;} };class elem1 { p ...
- priority_queue优先队列的使用方法
说到优先队列,大家肯定想到了队列(这肯定是对于学过队列的同学来说,当然了,没学过也没事,对于本篇文章没什么问题滴),队列的特征是后进后出,按照排队先来后到的顺序的,本篇文章介绍的priority_qu ...
最新文章
- (转)小小的研究了一下linux下的”注册表“ gconf-editor
- svm中支持向量的理解
- 多元统计分析最短距离法_多元统计分析重点
- SQL2012 附加数据库提示5120错误解决方法
- python大数据招聘信息_2017招聘大数据丨Python需求增速达174%,AI人才缺口超百万!...
- python elementtree 命名空间_用Python中的命名空间通过‘ElementTree’解析XML
- [jzoj NOIP2018模拟11.02]
- python 判断闰年
- 改善客户服务体验的 5 种方法
- direct 3d 渲染红蓝立体效果
- Asp.net 周旭龙 系列总结
- 计算机开机后黑屏鼠标显示桌面图标,win10系统电脑启动开机黑屏不显示只有鼠标图标的处理办法...
- SECURITY:加密与解密,AIDE入侵检测系统,扫面与抓包
- 自由谈:为什么使用 Linux
- Web 开发技术文档大全
- POI生成Excel
- Apache Solr7.4 入门教程
- 阿里妈妈广告预测线上0.082+baseline,特征部分
- Excel无法打开,内存或磁盘空间不足,Microsoft Excel无法再次打开或保存任何文档
- (附源码)计算机毕业设计SSM酒店入住管理系统
热门文章
- 中国移动、联通、电信、第三方平台IDC市场机房布局之争
- Anaconda :利用Anaconda Prompt (Anaconda3)建立、设计不同python版本及对应库函数环境之详细攻略
- ML之LiRDNNEL:基于skflow的LiR、DNN、sklearn的RF对Boston(波士顿房价)数据集进行回归预测(房价)
- CV:利用cv2+dlib库自带frontal_face_detector(人脸征检测器)实现人脸检测与人脸标记之《极限男人帮》和《NBA全明星球员》
- Py:python利用easygui实现最简单GUI带你学习区块链技术的发展和由来
- 安裝TA-Lib到想要罵髒話
- 本地化ASPXPivotGrid控件
- Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)【转】...
- [最短路]tvvj1031 热浪
- 记一种验证日期格式的正则表达式