在了解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相关推荐

  1. 容器删除元素后迭代器失效_STL 4: STL之容器:选择时机,删除元素,迭代器失效...

    一. 种类: 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist和rope.sl ...

  2. [C++ STL] 各容器简单介绍

    [C++ STL] 各容器简单介绍 目录 一.什么是STL? 二.容器(Containers) 2.1 vector 2.2 deque 2.3 list 2.4 set 2.5 map 2.6 容器 ...

  3. 【模板】数据结构之STL常用容器

    标准模板库(Standard Template Library,STL)是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R Musser在 ...

  4. STL 常用容器的底层数据结构

    STL 常用容器的底层数据结构实现 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque 底层数据结构为一个中央控制器和多个缓冲 ...

  5. 【读书笔记】【Effective STL】容器

    第 1 条:慎重选择容器类型. C++ 中不同的容器分类如下:[标准 or 非标准][STL or 非 STL][序列 or 关联] 标准 STL 序列容器:vector.string.deque.l ...

  6. STL——queue、priority_queue、deque

    文章目录 queue(队列) priority_queue(优先队列) 1.与queue的区别: 2.示例: 3.priority_queue内元素优先级设置 deque 示例: queue(队列) ...

  7. Effective STL之容器

    一.慎重选择容器类型 1.容器分类 标准STL序列容器:vector,string,deque,list: 标准STL关联容器:set,multiset,map,multimap: 非标准关联容器(基 ...

  8. C++中STL和容器、迭代器、算法之间的关系

    自学习C++以来,一直对STL.容器.迭代器.算法甚是困惑. 参考一些资料,加上自己的理解,整理如下 如果说程序等于数据结构+算法,STL就是一个小程序库,之所以说小,是因为容器模板中常用的函数有限, ...

  9. c语言stl模板,c/c++开发分享C++ 标准模板库 STL 顺序容器详解

    c++ 标准模板库 stl 顺序容器 容器 顺序性 重复性 支持迭代器 vector 动态数组 无序 可重复 随机访问迭代器 deque 双向队列 无序 可重复 随机访问迭代器 list 双向链表 无 ...

最新文章

  1. c语言删除偶数号节点,第十二周作业
  2. Googlequot;员工quot;曝内幕:Google员工的17个秘密
  3. 计算机组成原理考试知识点总结,最新2018计算机组成原理期末复习考试知识点复习考点归纳总结总结...
  4. sql case when 速记
  5. CF 2B.The least round way
  6. AtCoder Beginner Contest 215 F - Dist Max 2
  7. Duration(2020多校第二场D)
  8. mysql双重分组没有值也要显示_mysql 统计数据,按照日期分组,把没有数据的日期也展示出来...
  9. LeetCode刷题(1)
  10. beta分布_常用概率分布总结(2)
  11. Install Eclipse 3.7 Indigo and configure Eclipse
  12. pdnovel.php_Pdnovel 在線閱讀體驗
  13. IOS学习之UITableView滚动到指定位置
  14. 搜狐Linux运维工程师面试真题曝光
  15. Javascript---js的编码及解码
  16. win7做ftp服务器是否稳定,win7可以做ftp服务器吗
  17. 电感耦合等离子体质谱法响应时间
  18. 5GC基础:架构和网元
  19. 口模块型3500/22-01-01-00
  20. 织梦cms里面文章里面的HTML,dede源码在其它页面调用单页文章内容并过滤HTML代码的方法...

热门文章

  1. pyqt5 qlabel无法显示图片_实战PyQt5: 011-单选框控件QRadioButton
  2. php 查询and or,php – SQL查询多个AND和OR不起作用
  3. js中双感叹号_JavaScript中双叹号(!!)作用
  4. String使用注意二
  5. 二分法变种小结(leetcode 34、leetcode33、leetcode 81、leetcode 153、leetcode 74)
  6. kotlin 判断数字_Kotlin程序检查数字是偶数还是奇数
  7. java jar包示例_Java包isCompatibleWith()方法与示例
  8. MySQL的环境变量配置详细步骤
  9. read/fread write/fwrite 的区别
  10. python的opencv模块_OpenCV Python - 没有名为cv2的模块(再次)