一:优先队列priority_queue简介

同队列,不支持迭代

(一)和队列相比

同:

优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。

异:

但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。
这点类似于给队列里的元素进行了由大到小的顺序排序。

补充:元素之间比较

元素的比较规则默认按元素值由大到小排序,可以重载“<”操作符来重新定义比较规则。

(二)重点:同vector,deque,list,以及queue比较

虽然与queue相似,但是之所以不放在queue之后讲,是因为实现优先队列是要依靠容器的迭代器实现的,而queue和stack是没有迭代功能的。

而且stl中优先队列是基于vector和deque实现的,是基于这两种容器的迭代特性实现--->支持随机存取迭代


这也是为什么优先队列不可以基于list实现--->list不支持随机存取迭代

二:优先队列priority_queue的构造

priority_queue<int, vector<int>, cmp> q;    //定义方法
//其中第一个是数据类型,第二个参数为容器类型:默认是vector。第三个参数为比较函数:默认less。

案例1:默认最大值优先

         priority_queue<int, deque<int>>    pq;  //基于双端队列

         priority_queue<int, vector<int>>    pq;  //基于向量
上面是默认最大值优先

案例2:修改比较方式

        priority_queue<int,vector<int>, less<int>> pq1;     // 使用递减 less<int>函数对象排序    首位最大
priority_queue<int,deque<int>, greater<int>> pq2;    // 使用递增greater<int>函数对象排序 首位最小

三:优先队列常用操作

q.empty()        如果队列为空,则返回true,否则返回false

q.size()         返回队列中元素的个数

q.pop()          删除队首元素,但不返回其值

q.top()          返回具有最高优先级的元素值,但不删除该元素

q.push(item)     在基于优先级的适当位置插入新元素
    priority_queue<int,vector<int>> pq;
pq.push();
pq.push();
pq.push(); while (!pq.empty())
{
cout << pq.top() << " ";
pq.pop();
}

四:自定义比较结构

struct cmp1{
bool operator ()(int &a,int &b){
return a>b;//最小值优先
}
};
void main()
{
priority_queue<int,vector<int>,cmp1> pq;
pq.push();
pq.push();
pq.push(); while (!pq.empty())
{
cout << pq.top() << " ";
pq.pop();
} system("pause");
}

五:自定义数据结构(重载<比较运算符)

struct number1{
int x;
bool operator < (const number1 &a) const {
return x>a.x;//最小值优先
}
};
void main()
{
priority_queue<number1, vector<number1>> pq;
number1 n1, n2, n3;
n1.x = ;
n2.x = ;
n3.x = ;
pq.push(n1);
pq.push(n2);
pq.push(n3); while (!pq.empty())
{
cout << pq.top().x << " ";
pq.pop();
} system("pause");
}

数据结构(四)树---哈夫曼树了解以及代码实现

06--STL序列容器(priority_queue)的更多相关文章

  1. STL 序列容器

    转自时习之 STL中大家最耳熟能详的可能就是容器,容器大致可以分为两类,序列型容器(SequenceContainer)和关联型容器(AssociativeContainer)这里介绍STL中的各种序 ...

  2. STL List容器

    转载http://www.cnblogs.com/fangyukuan/archive/2010/09/21/1832364.html 各个容器有很多的相似性.先学好一个,其它的就好办了.先从基础开始 ...

  3. STL序列式容器学习总结

    STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...

  4. STL常用序列容器

    这里简要的记述一下STL常用容器的实现原理,要点等内容. vector vector是比较常用的stl容器,用法与数组是非类似,其内部实现是连续空间分配,与数组的不同之处在于可弹性增加空间,而arra ...

  5. [STL]heap和priority_queue

    一.heap 在STL中,priority_queue(优先权队列)的底层机制是最大堆,因此有必要先来了解一下heap.heap采用完全二叉树的结构,当然不是真正的binary tree,因为对于完全 ...

  6. C++ STL基本容器的使用

    C++中有两种类型的容器:顺序容器和关联容器.顺序容器主要有vector.list.deque等.其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与 ...

  7. c++复习:STL之容器

    1 STL的string 1 String概念 string是STL的字符串类型,通常用来表示字符串.而在使用string之前,字符串通常是用char*表示的.string与char*都可以用来表示字 ...

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

    什么是STL? 1.STL(Standard Template Library),即标准模板库,是一个高效的C++程序库. 2.包含了诸多常用的基本数据结构和基本算法.为广大C++程序员们提供了一个可 ...

  9. 【Example】C++ STL 常用容器概述

    前排提醒: 由于 Microsoft Docs 全是机翻.所以本文表格是我人脑补翻+审校. 如果有纰漏.模糊及时评论反馈. 序列式容器 序列容器是指在逻辑上以线性排列方式存储给定类型元素的容器. 这些 ...

  10. STL之容器基本操作

    容器类 STL Container Header Applications vector <vector> 直接访问任意元素,快速插入.删除尾部元素 deque <deque> ...

随机推荐

  1. Android Intent通讯实例

    //1.拨打电话 // 给移动客服10086拨打电话 Uri uri = Uri.parse("tel:10086"); Intent intent = new Intent(In ...

  2. SwaggerAPI注解详解,以及注解常用参数配置

    注解 @Api: 作用在类上,用来标注该类具体实现内容.表示标识这个类是swagger的资源 . 参数: tags:可以使用tags()允许您为操作设置多个标签的属性,而不是使用该属性. descri ...

  3. Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块

    Python第十三天   django 1.6   导入模板   定义数据模型   访问数据库   GET和POST方法    SimpleCMDB项目   urllib模块   urllib2模块 ...

  4. SQLsever 复制一行内容到本表

    insert into Table (userName,userAge) select userName,userAge from Table where Id=66 这里并不是 insert int ...

  5. python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)

    在写网络爬虫的时候,有时候会抓取到一些json格式的字符串,想要通过python字典的方式对字串中的内容进行寻址,则需要将json字符串先转换为python字典. dumps()函数: loads() ...

  6. windows压缩图片

  7. win7系统搭建FTP服务器

    工作需要,所以研究了一下. 1. 打开: 控制面板 -> 卸载程序 -> (左侧)打开或关闭windows功能 等个一小会,勾选如下图红色方框内的选项. 2. 开始 -> 搜索: I ...

  8. [LeetCode] 20. 有效的括号

    题目链接:https://leetcode-cn.com/problems/valid-parentheses/ 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串, ...

  9. vector入门

    vector怎么用? vector是什么? 你可以把它理解为一个数阵: 调用#include<vector> 定义:vector<int>v[N];//开一个名字叫做v的数字串 ...

  10. EntityFramework Core是否可以映射私有属性呢?了解一下。

    前言 最近几天身体有点抱恙,说话都需要勇气,痛哭.今天简短的写一点探索性的内容,仅供了解,感谢您的阅读. EF Core映射私有属性 在EF 6.x系列中写过一篇文章可以映射私有属性,说明EF的灵活性 ...