STL之容器适配器priority_queue
priority_queue(优先队列)是一个拥有权值观念的queue,它允许加入新元素,删除旧元素,审视元素值等功能。由于这是一个queue,所以只允许在底端加入元素,并从顶端取出元素, 除此之外别无其它存取元素的途径。
缺省情况下priority_queue系列利用一个max_heap(最大堆)完成,后者是一个以vector表现的完全二叉树。Max_heap可以满足priority_queue所需要的“依权值高低自动递减排序”的特性。

priority_queue完全以底部容器为根据,再加上heap处理规则,所以其实现非常简单,这里给出其模板声明:
template <class T, class Sequence = vector<T>, class Compare = less<typename Sequence::value_type>>
class priority_queue {
//…
protected:
Sequence c; // 底层容器
Compare comp; // 元素大小比较标准
//…
};
priority_queue模板有3个参数,第一个为元素类型,第二个为指定底层容器,默认为vector,第三个为内部元素比较函数,默认为标准库内置关系运算类仿函数less, 顺便把less的模板找出来看看:
template<class T>
struct less : public binary_function<T, T, bool>
{
bool operator() (const T& x, const T& y) { return x < y;}
};
类似内置关系运算仿函数一共6个,为别为:
等于 equal_to<T> 不等于 not_equal_to<T> 大于 greater<T> 大于或等于 greater_equal<T> 小于 less<T> 小于或等于 less_equal<T>
之后会单独将仿函数详细介绍下,这里只做相关了解。
下面给出测试代码:
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
] = {,,,,,,,,};
priority_queue<);
cout << "size = " << ipq.size() << endl; // size = 9
; i < ipq.size(); i++) {
cout << ipq.top() << ' '; // 9 9 9 9 9 9 9 9 9
}
cout << endl;
while (!ipq.empty()) {
cout << ipq.top() << ' '; // 9 8 5 4 3 3 2 1 0
ipq.pop();
}
cout << endl;
;
}
STL之容器适配器priority_queue的更多相关文章
- STL之容器适配器queue的实现框架
说明:本文仅供学习交流,转载请标明出处,欢迎转载! 上篇文章STL之容器适配器stack的实现框架已经介绍了STL是怎样借助基础容器实现一种经常使用的数据结构stack (栈),本文介绍下第二种STL ...
- 初步STL该容器适配器
容器适配器 特点 容器一定的顺序来实现(让现有的以集装箱堆放/式工作) 分类 1) stack: 头文件 <stack> • 栈 -- 后进先出 2) queue: 头文件 <que ...
- 容器适配器————priority_queue
#include <queue> priority_queue 容器适配器定义了一个元素有序排列的队列.默认队列头部的元素优先级最高.因为它是一个队列,所以只能访问第一个元素,这也意味着优 ...
- STL之容器适配器stack的实现框架
说明:本文仅供学习交流,转载请标明出处,欢迎转载! 一提到适配器(adapter).我们就想到了早期用电话线上网所用的调制解调器,俗称"猫"."猫"的作用是实现 ...
- 容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例
一.容器适配器 stack queue priority_queue stack.queue.priority_queue 都不支持任一种迭代器,它们都是容器适配器类型,stack是用vector/d ...
- c++ STL容器适配器
一.标准库顺序容器适配器的种类 标准库提供了三种顺序容器适配器:queue(FIFO队列).priority_queue(优先级队列).stack(栈) 二.什么是容器适配器 &q ...
- STL标准库-容器适配器
技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 上一节介绍了仿函数适配器,这节主要介绍容器适配器和迭代器适配器的概念,其实容器适配器和迭代器其适配器就是封装了一些其他class ...
- STL之容器(1)
STL容器类的模板 容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和 ...
- STL之容器基本操作
容器类 STL Container Header Applications vector <vector> 直接访问任意元素,快速插入.删除尾部元素 deque <deque> ...
随机推荐
- iOS、swift、React Native学习常用的社区、论坛
<!----iOS> <!----Swift>*IOS开发常用社区:http://code4app.com/ *IOS开发常用社区:http://www.cocoachina. ...
- Python第三方包的安装和管理
要想安装第三方的包,首先安装setuptools. 然后再安装pip,这个是用来管理第三方包的. 1. 包管理器pip,安装第三方包,以Selenium为例,运行 pip install seleni ...
- Unity浅析
在分析PRISM项目的时候, 发现里面用到了Unity 这个Component, 主要用于依赖注入的.由于对其不熟悉,索性分析了一下,记载在此,以作备忘. 任何事物的出现,总有它独特的原因,Unity ...
- Hyper-V端口映射
有时候我们为了让局域网或外网用户直接远程访问或访问虚拟机里的服务,可以将实机端口直接映射到Hyper-V的虚拟机里面,省去很多麻烦. 下面是hyper-v共享IP端口映射一些常用命令共享IP端口映射一 ...
- 在实现和使用上与select和poll有很大差异
在看此课程的读者,希望先阅读关于函数基础内容 函数定义与函数作用域 的章节,因为此课程或多或少会涉及函数基础的内容,而基础内容,本人放在 函数定义函数作用域 章节. 本文直接赘述函数参数与闭包,若涉及 ...
- WebBrowser处理AJAX生成的网页内容!
WebBrowser处理AJAX生成的网页内容! 等待网页执行完毕(AJAX执行后). 使用webBrowser1.Document.Body.OuterHtml可以获取到AJAX产生的网页内容.
- Redis 64 steps
a memo for redis 64 operations start server in console: 1. D:\>cd redis64 2. D:\redis64>redis- ...
- 将JSON格式的时间/Date(2367828670431)/格式 转为正常的年-月-日 格式
function formatDate(NewDtime) var dt = new Date(parseInt(NewDtime.slice(6, 19))); var year = dt.getF ...
- MySQL concat函数的使用
MySQL concat函数是MySQL数据库中众多的函数之一,下文将对MySQL concat函数的语法和使用进行说明,供您参考和学习. MySQL concat函数使用方法:CONCAT(str1 ...
- matlab 车牌分割的算法
function Touying(g) f=rgb2gray(g); % [m n]=size(f); [row col]=size(f); % T=graythresh(f) % T=T*255 % ...