C++ STL之priority_queue
STL中的priority_queue(优先队列)是一种会按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序的容器,不同优先级的情况下,top()上永远是最高优先级的数据,其底层采用的是堆结构(默认大顶堆)。注意相同优先级下并没有先进先出,后面的例子中可以看到
头文件#include<queue>
标准库默认使用元素类型的<操作符来确定它们之间的优先级关系,数据越大优先级越高,想要改变优先级的界定方式的话需要重载<操作符。
先看个最简单的:
#include<iostream>
#include<queue>
using namespace std; int main()
{
priority_queue<int>pq;
pq.push();
pq.push();
pq.push();
pq.push();
pq.push();
pq.push();
while(!pq.empty())
{
cout<<pq.top()<<endl;
pq.pop();
}
return ;
}
运行结果:

下面再看一个例子:
#include<iostream>
#include<queue>
using namespace std;
struct node
{
int value;
int pro;
friend bool operator <(node n1,node n2)//自定义priority_queue结构中优先级的界定方式
{
return n1.pro<n2.pro;
}
};
int main()
{
priority_queue<node>pq;
node temp; temp.pro=;
temp.value=;
pq.push(temp); temp.pro=;
temp.value=;
pq.push(temp); temp.pro=;
temp.value=;
pq.push(temp); temp.pro=;
temp.value=;
pq.push(temp); temp.pro=;
temp.value=;
pq.push(temp); temp.pro=;
temp.value=;
pq.push(temp); while(!pq.empty())
{
cout<<pq.top().pro<<" "<<pq.top().value<<endl;
pq.pop();
}
return ;
}
结果:

从这个例子中可以看到,对于相同优先级的三个pro值为4的结构体,输入顺序中value值依次为11,9,5,而输出确实5,11,9,所以相同优先级的情况下并没有先进先出。
如果想把底层改成小顶堆结构,需要重载<就可以了,如下面的例子:
#include<iostream>
#include<queue>
using namespace std;
struct node
{
int value;
int pro;
friend bool operator <(node n1,node n2)//自定义priority_queue结构中优先级的界定方式
{
return n1.pro>n2.pro;
}
};
int main()
{
priority_queue<node>pq;
node temp; temp.pro=;
temp.value=;
pq.push(temp); temp.pro=;
temp.value=;
pq.push(temp); temp.pro=;
temp.value=;
pq.push(temp); temp.pro=;
temp.value=;
pq.push(temp); temp.pro=;
temp.value=;
pq.push(temp); temp.pro=;
temp.value=;
pq.push(temp); while(!pq.empty())
{
cout<<pq.top().pro<<" "<<pq.top().value<<endl;
pq.pop();
}
return ;
}
结果如下:

最后吐槽一下,priority_queue为什么会是一种queue呢?从它上面我根本没看到队列先进先出的特点。
C++ STL之priority_queue的更多相关文章
- STL之priority_queue(优先队列)
priority_queue是一个容器适配器,在这个容器里第一个数据元素是最大的.它的使用场景是什么样:如果12306抢票,为什么黄牛能抢这么多票,感觉12306那边的请求队列是一个优先队列,黄牛的请 ...
- STL中priority_queue小结
(1)为了运用priority_queue,你必须包含头文件<queue>:#include<queue> (2)在头文件中priority_queue定义如下: namesp ...
- STL之priority_queue使用简介
优先队列容器也是一种从一端入队,另一端出对的队列.不同于一般队列的是,队列中最大的元素总是位于队首位置,因此,元素的出对并非按照先进先出的要求,将最先入队的元素出对,而是将当前队列中的最大元素出对. ...
- STL 中priority_queue小结
(1)为了运用priority_queue,你必须包含头文件<queue>:#include<queue> (2)在头文件中priority_queue定义如下: nam ...
- 【转载】STL之priority_queue
参考资料:传送门先回顾队列的定义:队列(queue)维护了一组对象,进入队列的对象被放置在尾部,下一个被取出的元素则取自队列的首部.priority_queue特别之处在于,允许用户为队列中存储的元素 ...
- STL之priority_queue
下面以 long long 型队列介绍: Q.empty() // 判断队列是否为空 返回ture表示空 返回false表示空 bool Q.top() // 返回顶端元素的值 元素还在队列里 lon ...
- 【STL】-priority_queue的用法
初始化: priority_queue<int> maxPQ; priority_queue<int,vector<int& ...
- STL之priority_queue为复合结构排序
priority_queue为复合结构排序: #include <iostream> #include <queue> using namespace std; struct ...
- C++ STL 优先队列 priority_queue 详解(转)
转自https://blog.csdn.net/c20182030/article/details/70757660,感谢大佬. 优先队列 引入 优先队列是一种特殊的队列,在学习堆排序的时候就有所了解 ...
随机推荐
- Swift-3-字符串和字符
// Playground - noun: a place where people can play import UIKit var someString = "some string ...
- topcoder 642
A:直接拆开字符串写就好了. 今天的题目比较容易一些: B:题目大意: 求最少的翻转次数,每次翻转i是对应 y%i==0都会翻转. 球所有翻转为off状态的最小次数: 从最小idx开始,依次做就好了, ...
- kerberos+ladp+hadoop-ha 安全认证部署配置
随着hadoop集群里的数据量越来越大,各业务数据都集中了里面,自然要为各业务都要提供数据支持,又希望各业务数据是相对独立安全的,这最时候就需要做安全认证了 hadoop ha 测试集群部署规划 ha ...
- 【转】Sublime text 3 中文文件名显示方框怎么解决
引用自:http://www.zhihu.com/question/24029280 如图,中文文件名打开全是乱码,内容倒是装了converttoutf8没什么太大的问题. 这个是sublime te ...
- Sqli-labs less 46
Less-46 从本关开始,我们开始学习order by 相关注入的知识. 本关的sql语句为$sql = "SELECT * FROM users ORDER BY $id"; ...
- __dict__和__slots__
__dict__: __slots__:
- ASP.NET MVC 应用提速的十种方法
[编者按]本文作者为 DZone 社区的最具价值博主(MVB) Jonathan Danylko,主要介绍为 ASP.NET MVC 应用提速的十种方法.由国内 ITOM 管理平台 OneAPM 编译 ...
- 只 一行显示可左右滚动的文本(UITextField中文限制)
// // ViewController.m // 一行显示可滚动的文本 // // Created by apple on 15-5-8. // Copyright (c) 2015年 apple. ...
- Android loader 详解
装载器从android3.0开始引进.它使得在activity或fragment中异步加载数据变得简单.装载器具有如下特性: 它们对每个Activity和Fragment都有效. 他们提供了异步加载数 ...
- DevExpress GridView 自定义搜索按钮改为中文内容
首先将 GridControl 控件的搜索功能显示出来. http://www.cnblogs.com/DeepLearing/p/3887601.html 显示效果如下: 可以通过 GridLoca ...