priority_queue的常见用法

priority_queue是什么?

  • 优先队列
  • 底层实现用堆来实现
  • 每次队首的优先级最大

priority_queue的定义

引入头文件

# include <queue>
using namespace std;

定义使用

priority_queue<typename> name;

容器内元素的访问

只能通过top()函数来访问队首的元素

priority_queue<int> q;
q.push(4);
q.push(3);
q.push(2);
cout<<q.top()<<endl;//4

priority_queue常用函数解析

push()

使得元素x入队,时间复杂度为o(logN)。

top()

获取队首的元素,时间复杂度为o(1)

pop()

pop()令队首出队,时间复杂度为o(logN)

empty()

检测队列是否为空,返回true,返回false

size()

返回队列中的元素数量

priority_queue队列优先级的设置

基本数据类型优先级的设置

对于基础类型,一般是数字大的优先级高,对于字符,就是字典序越大,优先级越高。

priority_queue<int> q;
priority_queue<int,vector<int>,less<int>>;

两种定义方式等价

  • vector是承载堆的容器
  • less是比较类,less表示数字大优先级大,greater表示数字大,优先级小

结构体优先级设置

重载小于号

例子

struct fruite{
string name;
string price;
};

价格高优先级高

设置友元函数,重载小于号<

struct fruite{
string name;
string price;
friend bool operator <(fruite a,fruite b){
return fruite.price<fruite.price;
}
};

注意

只能重载小于号

如果"重载>"

 friend bool operator <(fruite a,fruite b){
return fruite.price>fruite.price;
}

创建比较结构体

struct fruite{
string name;
string price;
}; struct cmp{
bool operator() (fruite a,fruite b){
return a.price>b.price;
}
}; priority_queue<fruite,vector<fruite>,cmp> q;

priority_queue的用途以及注意点

  • 解决贪心问题
  • 注意在使用top()之前要判空使用empty()

priority_queue的常见用法的更多相关文章

  1. STL priority_queue 常见用法详解

    <算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...

  2. Linux中find常见用法

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  3. php中的curl使用入门教程和常见用法实例

    摘要: [目录] php中的curl使用入门教程和常见用法实例 一.curl的优势 二.curl的简单使用步骤 三.错误处理 四.获取curl请求的具体信息 五.使用curl发送post请求 六.文件 ...

  4. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  5. find常见用法

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  6. iOS 开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  7. iOS开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  8. [转]EasyUI——常见用法总结

    原文链接: EasyUI——常见用法总结 1. 使用 data-options 来初始化属性. data-options是jQuery Easyui 最近两个版本才加上的一个特殊属性.通过这个属性,我 ...

  9. NSString常见用法总结

    //====================NSStirng 的常见用法==================== -(void)testString { //创建格式化字符串:占位符(由一个%加一个字 ...

随机推荐

  1. BZOJ 2434: [Noi2011]阿狸的打字机 AC自动机+fail树+线段树

    Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的 ...

  2. 多版本python的pip 升级后, pip2 pip3 与python版本失配

    mint19.2   本来pip 和 pip2 对应 python2.7   pip3对应python3.6 用源码安装了python3.7之后. 这样 版本也没问题. 但是,  用pip3.7 安装 ...

  3. 【UTR #3】量子破碎

    一道有趣的题. 看到按位的矩阵运算,如果对FWT比较熟悉的话,会比较容易地想到. 这种形式也就FWT等转移里面有吧--就算有其他的也难构造出来. 然而FWT的矩阵并不是酉矩阵(也就是满足 \(AA^T ...

  4. layui button按钮点击导致页面重新刷新的解决方案

    网友的解决方法:(我只想说,放屁!!!而且大家都在复制粘贴,浪费时间) 方法一:将button标签更换为input <input class="layui-btn test" ...

  5. JS框架_(JQuery.js)圆形多选菜单选项

    百度云盘 传送门 密码:zb1c 圆形多选菜单选项效果: <!DOCTYPE html> <html lang="en" > <head> &l ...

  6. 6张图解释IO流

    1.字节流InputStream 2.字节流OutputStream 3.字符流Reader 4.字符流Writer 5.节点流 6.处理流 总结: 节点流可以直接连接在数据源上,处理流不可以:节点流 ...

  7. MyOD C语言代码实现

    Myod C语言实现 一.题目要求 1 复习c文件处理内容 2 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能 main与其他分开,制作静态库和动态库 编写Ma ...

  8. IDEA配置常见配置

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  9. vs2015使用低版本编译的openssl问题

    用Vs2005编译的openssl,在vs2015中使用就悲剧了,报如下错误 >libeay32.lib(cryptlib.obj) : error LNK2019: 无法解析的外部符号 __v ...

  10. App架构设计:接口的设计

    安全机制的设计 现在,大部分App的接口都采用RESTful架构,RESTFul最重要的一个设计原则就是,客户端与服务器的交互在请求之间是无状态的,也就是说,当涉及到用户状态时,每次请求都要带上身份验 ...