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 { //创建格式化字符串:占位符(由一个%加一个字 ...
随机推荐
- CGI环境变量
所有的CGI程序都接收以下的环境变量,这些变量在CGI程序中发挥了重要的作用: 变量名 描述 CONTENT_TYPE 这个环境变量的值指示所传递来的信息的MIME类型.目前,环境变量CONTENT_ ...
- sh_05_列表遍历
sh_05_列表遍历 name_list = ["张三", "李四", "王五", "王小二"] # 使用迭代遍历列表 ...
- php面向对象 2
继承概念:如果一个类有子类,那么该子类会继承父类的一切东西(私有成员访问不到)在定义子类的时候需要加一个关键字:extends特点:单继承,一个类只能有一个父类如果父类中有构造函数,子类在实例化的时候 ...
- chrome浏览器爬虫WebDriverException解决采用python + selenium + chrome + headless模式
WebDriverException: Message: unknown error: Chrome failed to start: crashed 第一种:如果出现下面情况: chrome浏览器有 ...
- 第一部分 Python基础知识
Python测试开发核心编程主要分两部分,python3基础和Python进阶,每部分的重点内容如下 一. Python测试开发核心编程 数据类型 控制结构 异常处理 文件操作 线程与进程(了解) 常 ...
- flutter ListView嵌套高度问题
ListView嵌套时高度无法自适应,需要设置高度才可以显示,设置以下属性可以解决上述问题 shrinkWrap: true, physics: NeverScrollableScrollPhysic ...
- flutter tabbar创建与显示
效果图 main.dart import 'package:flutter/material.dart'; import 'pages/index_page.dart'; void main() =& ...
- Java学习笔记之Iterator和ListIterator
原文:https://blog.csdn.net/GongchuangSu/article/details/51514380 Iterator接口是对collection进行迭代的迭代器,ListIt ...
- VMware or VirtualBox+centos7 安装教程
一.准备工作:1.首次安装虚拟机时,需要的准备工作:打开intel的虚拟技术服务(否则安装centos系统时会报错).重启电脑,显示log时进入BIOS服务(不同电脑进入BIOS方式不同,一般是进入l ...
- global和nonlocal的用法
1 nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量.写在内部嵌套函数里面,它实质上是将该变量定义成了全局变量,它等价于用两个global来定义该变量.只不过用两个gl ...