简述

普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现,其在插入数据会自动排序。

头文件

#include<queue>

声明

priority_queue<T, Cotainer,Compare>

T - 存储的元素类型。
Container - 用于存储元素的底层容器类型。
Compare - 提供严格弱序的比较 (Compare) 类型。
priority_queue <int> i;
priority_queue <double> d;
//后两个不声明默认容器vector,函数less(优先级从小到大)

基本函数

q.size();//返回q里元素个数
q.empty();//返回q是否为空,空则返回true,否则返回false
q.push();//插入元素,并对底层容器排序
q.pop();//删掉q的第一个元素
q.top();//返回q的第一个元素
#include<iostream>
#include<queue>
using namespace std;
int main()
{
priority_queue<int> q;
for(int i=5;i>=0;--i)
q.push(i);
cout<<"元素个数为:"<<q.size()<<endl;
for(int i=0;i<6;++i)
{
cout<<q.top()<<endl;
q.pop();
}
return 0;
}

运行结果

构造优先级

声明优先队列时默认是less,如何改变优先级呢?

priority_queue<int,vector<int>,less<int> > q;//默认
priority_queue<int,vector<int>,greater<int> > q;

less优先级是栈顶元素从大到小,而greater正好与其相反。

还可根据自己需求构造

#include<iostream>
#include<queue>
#include<cstdlib>
using namespace std;
struct Node
{
int x,y;
Node(int a=0, int b=0):
x(a), y(b) {}
}; struct cmp
{
bool operator()(Node a, Node b)
{
if(a.x == b.x) return a.y>b.y;
return a.x>b.x;
}
}; int main()
{
priority_queue<Node, vector<Node>, cmp> p;
for(int i=0; i<5; ++i)
p.push(Node(rand(), rand()));
while(!p.empty())
{
cout<<p.top().x<<' '<<p.top().y<<endl;
p.pop();
}
return 0;
}

c++ STL - priority_queue优先队列详解的更多相关文章

  1. 如约而至,Java 10 正式发布! Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势 努力的孩子运气不会太差,跌宕的人生定当更加精彩 优先队列详解(转载)

    如约而至,Java 10 正式发布!   3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java ...

  2. STL bind1st bind2nd详解

    STL bind1st bind2nd详解   先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...

  3. C++ STL bitset 容器详解

    C++ STL bitset 容器详解 本篇随笔讲解\(C++STL\)中\(bitset\)容器的用法及常见使用技巧. \(bitset\)容器概论 \(bitset\)容器其实就是个\(01\)串 ...

  4. 2.3 C++STL vector容器详解

    文章目录 2.3.1 引入 2.3.2 代码实例 2.3.3 运行结果 总结 2.3.1 引入 vector 容器 动态数组 可变数组 vector容器 单口容器(尾部操作效率高) vector动态增 ...

  5. [转]c++优先队列(priority_queue)用法详解

    既然是队列那么先要包含头文件#include <queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队 优先队列具有队列的所有特性, ...

  6. 优先队列详解priority_queue .RP

    ) 删除.在最小优先队列(min priorityq u e u e)中,查找操作用来搜索优先权最小的元素,删除操作用来删除该元素;对于最大优先队列(max priority queue),查找操作用 ...

  7. c++优先队列(priority_queue)用法详解

    转自csdn的文章,仅作为学习笔记.原文链接:https://blog.csdn.net/weixin_36888577/article/details/79937886 普通的队列是一种先进先出的数 ...

  8. C++ STL 优先队列详解

    一.解释: 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序,每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储. 例如,将元 ...

  9. STL 优先队列详解

    优先队列是一个保证队列里元素单调的队列,我们可以利用它来维护一个线性结构的单调性. 一般的优先队列: 当然需要加头文件 #include <queue> priority_queue &l ...

随机推荐

  1. Win10中如何把语言栏缩到系统托盘

    Win10中如何把语言栏缩到系统托盘 原来语言栏是在系统托盘中的,右键点击,然后选择“显示语言栏”,就不能缩回去了: 后来在“控制面板\时钟.语言和区域\语言\高级设置”里面,有一个选项: “使用桌面 ...

  2. broadleaf commerce到mysql和tomcat的迁移

    近期刚刚接触broadleaf commerce, 一个电商站点的开源模版.详细的执行和配置能够參考链接:点击打开链接 而该模版是在jetty容器下执行的,数据库是HSQL.官方站点上给出了怎样将数据 ...

  3. Cocos2d-X开发中国象棋《三》開始场景的实现

    在前面两节(第一节.第二节)中介绍了中国象棋的功能和project文件.在这篇博客中将介绍中国象棋的開始场景的实现 在写代码前先理清一下实现開始场景的思路: 1.打开游戏后进入開始场景,场景上显示一个 ...

  4. 解决国内android sdk无法更新,google不能的简单办法

    在国内屏蔽了很多外国站点.连google 和android都屏蔽了,做程序猿的就苦了! 只是车到山前必有路,我们也有我们的办法! 推荐一个比以下的更好的方法:红杏公益代理:http://blog.cs ...

  5. 零基础学python-2.17 文件、open()、file()

    今天我们来说说文件,以及跟文件有关的内建函数open和file 首先我们在python的根文件夹下建一个名为"123"的txt文本文件 文件中面我们输入一些文本 watermark ...

  6. 关于QT版本的安装配置的一些困惑

    大概是之前安装和使用QT太顺利了,什么都没注意就开始使用了.在使用VS2012开发Qt5.31的程序一段时间以后,虽然好用,但是发现其编译的程序不能在XP上使用,要打补丁才行.不仅VS2012本身要打 ...

  7. pattern matching is C# 7.0

    https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/is 原来的版本 private static s ...

  8. 如何运行开源的React Native项目?

    如何运行开源的RN项目? 1.下载 2.解压 3.配置本地sdk位置 sdk.dir = D\:\\Android\\SDK 4.调整gradle版本 apply plugin: "com. ...

  9. bzoj3673 & bzoj3674 & 洛谷P3402 可持久化并查集

    题目:bzoj3673:https://www.lydsy.com/JudgeOnline/problem.php?id=3673 bzoj3674:https://www.lydsy.com/Jud ...

  10. 网易UI自动化测试工具Airtest中导入air文件中的方法

    最近看了一下网易的Airtest ,UI测试工具,写了一些后在导入其他air文件中的.py文件,卡了一下,现在博客中纪录一下导入其他air文件的方式: 在Airtest 测试工具中,导入其他air文件 ...