priority_queue的常见用法
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的常见用法的更多相关文章
- STL priority_queue 常见用法详解
<算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...
- Linux中find常见用法
Linux中find常见用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} \; find命令的参数 ...
- php中的curl使用入门教程和常见用法实例
摘要: [目录] php中的curl使用入门教程和常见用法实例 一.curl的优势 二.curl的简单使用步骤 三.错误处理 四.获取curl请求的具体信息 五.使用curl发送post请求 六.文件 ...
- Guava中Predicate的常见用法
Guava中Predicate的常见用法 1. Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...
- find常见用法
Linux中find常见用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} \; find命令的参数 ...
- iOS 开发多线程篇—GCD的常见用法
iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...
- iOS开发多线程篇—GCD的常见用法
iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...
- [转]EasyUI——常见用法总结
原文链接: EasyUI——常见用法总结 1. 使用 data-options 来初始化属性. data-options是jQuery Easyui 最近两个版本才加上的一个特殊属性.通过这个属性,我 ...
- NSString常见用法总结
//====================NSStirng 的常见用法==================== -(void)testString { //创建格式化字符串:占位符(由一个%加一个字 ...
随机推荐
- 任务Task、先后任务
Task类似后台线程. using System; using System.Threading; using System.Threading.Tasks;//引用命名空间 namespace Co ...
- Redis 集群规范
什么是 Redis 集群??Redis 集群是一个分布式(distributed).容错(fault-tolerant)的 Redis 实现,集群可以使用的功能是普通单机 Redis 所能使用的功能的 ...
- 利用pdfbox和poi抽取pdf、doc以及docx格式的内容
使用pdfbox1.5.0抽取pdf格式文档内容,使用poi3.7抽取doc及docx文档内容: /** * Created by yan.shi on 2017/9/25. */ import or ...
- js多种方法取数组的最后一个元素
一: pop()方法 pop()方法,删除数组最后一个并返回该元素 利用这个方法可以取到数组的最后一个,同理shift()可以取到数组的第一个(shift()删除数组第一个并返回该元素) var ar ...
- python学习之路(5)
条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现: age=20 if age>=18: ...
- IDEA下从零开始搭建SpringBoot工程
SpringBoot的具体介绍可以参看其他网上介绍,这里就不多说了,就这几天的学习,个人理解,简而言之: (1)它是Spring的升级版,Spring容器能做到的事情,它都能做到,而且更简便,从配置形 ...
- php面向对象 2
继承概念:如果一个类有子类,那么该子类会继承父类的一切东西(私有成员访问不到)在定义子类的时候需要加一个关键字:extends特点:单继承,一个类只能有一个父类如果父类中有构造函数,子类在实例化的时候 ...
- Java内存泄漏分析和预防
1. 什么是内存泄漏?有什么危害 书面说法: 内存泄漏:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着. 在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个 ...
- shell 并发进程的例子
linux shell 实现后台多进程运行的,开始和终止 原创 2014年11月21日 12:04:51 9953 linux shell 实现后台开始,和停止多进程 知识点: xxxxcmd.sh ...
- redis cluster 集群 安装 配置 详解
redis cluster 集群 安装 配置 详解 张映 发表于 2015-05-01 分类目录: nosql 标签:cluster, redis, 安装, 配置, 集群 Redis 集群是一个提供在 ...