C++STL特殊容器priority_queue
在了解priority_queue(优先队列)前,可以先去瞅瞅queue,下面是传送门啦>——<
传送门
priority_queue的基本性能
class priority_queue<>实现出一个queue,只不过其中的元素依照优先级被读取。priority_queue的接口与queue非常相近,只不过在插入元素后priority_queue会自动为元素排序,默认排序是operator <形成降序排列,也就是说,队首的元素默认是最大的元素,我们在弹出元素时,就会弹出最大的那个元素。值得注意的是,如果同时存在若干个数值最大的元素,我们无法确知究竟哪一个会入选。
priority_queue使用须知
1.包含头文件
#include<queue>
2.在头文件<queue>中,class priority_queue 定义如下
namespace std {template <typename T,typename Container = vector<T>typename Compare = less<typename Container::value_type>>class priority_queue; }
第一个template参数是元素类型,带有默认值的第二个template参数定义了priority_queue内部用来存放元素的容器,默认容器为vector,带有默认值的第三个template参数定义出“用以查找下一个最高优先级元素”的排序准则,默认以operator<作为比较标准。
但实际上,你可以用任何sequence容器支持priority_queue,只要他们支持random-access iterator和front()、push_back()、pop_back()等操作就行。由于priority_queue用到了STL heap算法,所以容器必须支持random-access。
priority_queue核心操作
1.核心接口成员函数
push() //将一个元素放入priority_queue中 top() //返回priority_queue的一个队首元素,但是不删除它 pop() //删除priority_queue的一个队首元素,但是不返回它
2.建立一个升序排序准则的priority_queue
priority_queue<int,vector<int>,greater<int> > pq; //建立一个容器为vector名为 pq 的 priority_queue
3.priority_queue的具体操作
#include<iostream> #include<queue> //必不可少的头文件们 using namespace std; int main() {//创建一个容器为string的优先队列priority_queue<string> pq1;//插入三个字符串pq1.push("AWSL");pq1.push("WSND");pq1.push("NMSL");//打印优先队列cout << "priority_queue pq1:" << endl;cout << "now pq1.size is: ";cout << pq1.size() << endl;cout << "从队首开始弹出pq1的元素" << endl;cout << pq1.top() << endl;pq1.pop();cout << pq1.top() << endl;pq1.pop();cout << pq1.top() << endl;pq1.pop();cout << "now pq1.size is: ";cout << pq1.size() << endl;cout << endl;//-----------------------------------//创建一个容器默认但是排序准则为升序的优先队列priority_queue<int, vector<int>, greater<int> > pq2;//插入三个数字pq2.push(4396);pq2.push(777);pq2.push(250);//打印优先队列cout << "priority_queue pq2:" << endl;cout << "now pq2.size is: ";cout << pq2.size() << endl;cout << "从队首开始弹出pq2的元素" << endl;cout << pq2.top() << endl;pq2.pop();cout << pq2.top() << endl;pq2.pop();cout << pq2.top() << endl;pq2.pop();cout << "now pq2.size is: ";cout << pq2.size() << endl; }
本文留下了一个小bug,等待初学者自己去发现哟,嘻嘻嘻/*-*\
转载于:https://www.cnblogs.com/cloudplankroader/p/10394252.html
C++STL特殊容器priority_queue相关推荐
- 容器删除元素后迭代器失效_STL 4: STL之容器:选择时机,删除元素,迭代器失效...
一. 种类: 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist和rope.sl ...
- [C++ STL] 各容器简单介绍
[C++ STL] 各容器简单介绍 目录 一.什么是STL? 二.容器(Containers) 2.1 vector 2.2 deque 2.3 list 2.4 set 2.5 map 2.6 容器 ...
- 【模板】数据结构之STL常用容器
标准模板库(Standard Template Library,STL)是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R Musser在 ...
- STL 常用容器的底层数据结构
STL 常用容器的底层数据结构实现 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque 底层数据结构为一个中央控制器和多个缓冲 ...
- 【读书笔记】【Effective STL】容器
第 1 条:慎重选择容器类型. C++ 中不同的容器分类如下:[标准 or 非标准][STL or 非 STL][序列 or 关联] 标准 STL 序列容器:vector.string.deque.l ...
- STL——queue、priority_queue、deque
文章目录 queue(队列) priority_queue(优先队列) 1.与queue的区别: 2.示例: 3.priority_queue内元素优先级设置 deque 示例: queue(队列) ...
- Effective STL之容器
一.慎重选择容器类型 1.容器分类 标准STL序列容器:vector,string,deque,list: 标准STL关联容器:set,multiset,map,multimap: 非标准关联容器(基 ...
- C++中STL和容器、迭代器、算法之间的关系
自学习C++以来,一直对STL.容器.迭代器.算法甚是困惑. 参考一些资料,加上自己的理解,整理如下 如果说程序等于数据结构+算法,STL就是一个小程序库,之所以说小,是因为容器模板中常用的函数有限, ...
- c语言stl模板,c/c++开发分享C++ 标准模板库 STL 顺序容器详解
c++ 标准模板库 stl 顺序容器 容器 顺序性 重复性 支持迭代器 vector 动态数组 无序 可重复 随机访问迭代器 deque 双向队列 无序 可重复 随机访问迭代器 list 双向链表 无 ...
最新文章
- c语言删除偶数号节点,第十二周作业
- Googlequot;员工quot;曝内幕:Google员工的17个秘密
- 计算机组成原理考试知识点总结,最新2018计算机组成原理期末复习考试知识点复习考点归纳总结总结...
- sql case when 速记
- CF 2B.The least round way
- AtCoder Beginner Contest 215 F - Dist Max 2
- Duration(2020多校第二场D)
- mysql双重分组没有值也要显示_mysql 统计数据,按照日期分组,把没有数据的日期也展示出来...
- LeetCode刷题(1)
- beta分布_常用概率分布总结(2)
- Install Eclipse 3.7 Indigo and configure Eclipse
- pdnovel.php_Pdnovel 在線閱讀體驗
- IOS学习之UITableView滚动到指定位置
- 搜狐Linux运维工程师面试真题曝光
- Javascript---js的编码及解码
- win7做ftp服务器是否稳定,win7可以做ftp服务器吗
- 电感耦合等离子体质谱法响应时间
- 5GC基础:架构和网元
- 口模块型3500/22-01-01-00
- 织梦cms里面文章里面的HTML,dede源码在其它页面调用单页文章内容并过滤HTML代码的方法...
热门文章
- pyqt5 qlabel无法显示图片_实战PyQt5: 011-单选框控件QRadioButton
- php 查询and or,php – SQL查询多个AND和OR不起作用
- js中双感叹号_JavaScript中双叹号(!!)作用
- String使用注意二
- 二分法变种小结(leetcode 34、leetcode33、leetcode 81、leetcode 153、leetcode 74)
- kotlin 判断数字_Kotlin程序检查数字是偶数还是奇数
- java jar包示例_Java包isCompatibleWith()方法与示例
- MySQL的环境变量配置详细步骤
- read/fread write/fwrite 的区别
- python的opencv模块_OpenCV Python - 没有名为cv2的模块(再次)