06--STL序列容器(priority_queue)
一:优先队列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)的更多相关文章
- STL 序列容器
转自时习之 STL中大家最耳熟能详的可能就是容器,容器大致可以分为两类,序列型容器(SequenceContainer)和关联型容器(AssociativeContainer)这里介绍STL中的各种序 ...
- STL List容器
转载http://www.cnblogs.com/fangyukuan/archive/2010/09/21/1832364.html 各个容器有很多的相似性.先学好一个,其它的就好办了.先从基础开始 ...
- STL序列式容器学习总结
STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...
- STL常用序列容器
这里简要的记述一下STL常用容器的实现原理,要点等内容. vector vector是比较常用的stl容器,用法与数组是非类似,其内部实现是连续空间分配,与数组的不同之处在于可弹性增加空间,而arra ...
- [STL]heap和priority_queue
一.heap 在STL中,priority_queue(优先权队列)的底层机制是最大堆,因此有必要先来了解一下heap.heap采用完全二叉树的结构,当然不是真正的binary tree,因为对于完全 ...
- C++ STL基本容器的使用
C++中有两种类型的容器:顺序容器和关联容器.顺序容器主要有vector.list.deque等.其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与 ...
- c++复习:STL之容器
1 STL的string 1 String概念 string是STL的字符串类型,通常用来表示字符串.而在使用string之前,字符串通常是用char*表示的.string与char*都可以用来表示字 ...
- [C++ STL] 各容器简单介绍
什么是STL? 1.STL(Standard Template Library),即标准模板库,是一个高效的C++程序库. 2.包含了诸多常用的基本数据结构和基本算法.为广大C++程序员们提供了一个可 ...
- 【Example】C++ STL 常用容器概述
前排提醒: 由于 Microsoft Docs 全是机翻.所以本文表格是我人脑补翻+审校. 如果有纰漏.模糊及时评论反馈. 序列式容器 序列容器是指在逻辑上以线性排列方式存储给定类型元素的容器. 这些 ...
- STL之容器基本操作
容器类 STL Container Header Applications vector <vector> 直接访问任意元素,快速插入.删除尾部元素 deque <deque> ...
随机推荐
- typescript中的泛型
泛型:软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性. 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能. 在像C#和Ja ...
- (爬虫)urllib库
一.爬虫简介 什么是爬虫?通俗来讲爬虫就是爬取网页数据的程序. 要了解爬虫,还需要了解HTTP协议和HTTPS协议:HTTP协议是超文本传输协议,是一种发布和接收HTML页面的传输协议:HTTPS协议 ...
- 力扣算法题—093复原IP地址
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135", ...
- 教你在浏览器里做出EXCEL的效果
在浏览器里做出EXCEL的效果,复制.粘贴.设置公式.双击编辑等效果,如果自己开发的话,比较麻烦,建议使用成熟的插件.这里介绍使用智表ZCELL插件,实现用户快捷操作. 首先下载插件,引入到页面中,一 ...
- 修饰符-static
一.static静态修饰符 static修饰符能够修饰属性,方法,初始代码块,不能修饰局部变量和类. 静态的变量叫常量,非静态的变量叫实例变量. 1.修饰属性 package gc.test.java ...
- [题解]洛谷P2709 小B的询问
地址 是一道莫队模板题. 分析 设\(\text{vis[i]}\)表示元素\(\text{i}\)出现的次数 当一个元素进入莫队时,它对答案的贡献增加.有\(\delta Ans=(X+1)^2-X ...
- [解读REST] 2.REST用来干什么的?
衔接上文[解读REST] 1.REST的起源,介绍了REST的诞生背景.每当笔者遇到一个新事物的想去了解的时候,总是会问上自己第一个问题,这个新事物是干什么用的?在解释我所理解的REST这个过程中也不 ...
- Python爬虫爬取网页图片
没想到python是如此强大,令人着迷,以前看见图片总是一张一张复制粘贴,现在好了,学会python就可以用程序将一张张图片,保存下来. 今天逛贴吧看见好多美图,可是图片有点多,不想一张一张地复制粘贴 ...
- 三分钟明白 Activiti工作流 -- java运用
原文地址:https://blog.csdn.net/jiangyu1013/article/details/73250902 一. 什么是工作流 以请假为例,现在大多数公司的请假流程是这样的 员工打 ...
- Python-包-65
包 包是一种通过使用‘.模块名’来组织python模块名称空间的方式. 1. 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警 ...