优先队列priority_queue 用法详解
优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序
每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储。
例如:我们常用的操作就是对数据排序,优先队列默认的是数据大的优先级高
所以我们无论按照什么顺序push一堆数,最终在队列里总是top出最大的元素。
用法:
示例:将元素5,3,2,4,6依次push到优先队列中,print其输出。
1. 标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。
priority_queue<int> pq;
通过<操作符可知在整数中元素大的优先级高。
故示例1中输出结果为: 6 5 4 3 2
2. 数据越小,优先级越高
priority_queue<int, vector<int>, greater<int> >pq;
其中
第二个参数为容器类型。
第二个参数为比较函数。
故示例2中输出结果为:2 3 4 5 6
3. 自定义优先级,重载比较符号
重载默认的 < 符号
struct node {friend bool operator< (node n1, node n2){return n1.priority < n2.priority;}int priority;int value; };
这时,需要为每个元素自定义一个优先级。
注:重载>号会编译出错,因为标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。
而且自定义类型的<操作符与>操作符并无直接联系
代码:
1 #include<iostream> 2 #include<functional> 3 #include<queue> 4 using Namespace stdnamespace std; 5 struct node 6 { 7 friend bool operator< (node n1, node n2) 8 { 9 return n1.priority < n2.priority; 10 } 11 int priority; 12 int value; 13 }; 14 int main() 15 { 16 const int len = 5; 17 int i; 18 int a[len] = {3,5,9,6,2}; 19 //示例1 20 priority_queue<int> qi; 21 for(i = 0; i < len; i++) 22 qi.push(a[i]); 23 for(i = 0; i < len; i++) 24 { 25 cout<<qi.top()<<" "; 26 qi.pop(); 27 } 28 cout<<endl; 29 //示例2 30 priority_queue<int, vector<int>, greater<int> >qi2; 31 for(i = 0; i < len; i++) 32 qi2.push(a[i]); 33 for(i = 0; i < len; i++) 34 { 35 cout<<qi2.top()<<" "; 36 qi2.pop(); 37 } 38 cout<<endl; 39 //示例3 40 priority_queue<node> qn; 41 node b[len]; 42 b[0].priority = 6; b[0].value = 1; 43 b[1].priority = 9; b[1].value = 5; 44 b[2].priority = 2; b[2].value = 3; 45 b[3].priority = 8; b[3].value = 2; 46 b[4].priority = 1; b[4].value = 4; 47 48 for(i = 0; i < len; i++) 49 qn.push(b[i]); 50 cout<<"优先级"<<'\t'<<"值"<<endl; 51 for(i = 0; i < len; i++) 52 { 53 cout<<qn.top().priority<<'\t'<<qn.top().value<<endl; 54 qn.pop(); 55 } 56 return 0; 57 }
转载于:https://www.cnblogs.com/Drenight/p/8611337.html
优先队列priority_queue 用法详解相关推荐
- 【转】c++优先队列(priority_queue)用法详解
既然是队列那么先要包含头文件#include <queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队 优先队列具有队列的所有特性, ...
- c++优先队列(priority_queue)用法详解
既然是队列那么先要包含头文件#include <queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队 优先队列具有队列的所有特性, ...
- python argv 详解_Python3 sys.argv[ ]用法详解
sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个"外部"很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可 ...
- oracle中的exists 和 not exists 用法详解
from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...
- ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)
ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...
- python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解
本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...
- C++中substr()函数用法详解
C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...
- php theme_path,PHP_Yii2主题(Theme)用法详解,本文实例讲述了Yii2主题(Theme) - phpStudy
Yii2主题(Theme)用法详解 本文实例讲述了Yii2主题(Theme)用法.分享给大家供大家参考,具体如下: 首先看看主要的配置方式: 'components' => [ 'view' = ...
- LayoutInflater的inflate函数用法详解
LayoutInflater的inflate函数用法详解 LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: ...
最新文章
- DSP的GEL文件介绍
- PHP - windows下编译PHP 7.2的memcache
- 介绍一个国外的分类网站Egouz
- 【java】【乱码】Java 读取本地 UTF8 txt文件乱码处理
- VC 实现文件夹属性的获取与更改
- TypeScript入门教程 之 for ... of 与 for ... in
- Block代码块中使用局部变量注意点
- SQLite学习手册(目录)
- 如何将stdin、stdout、stderr重定向到/dev/null
- libsvm 的使用
- 【知识蒸馏】如何写好BERT知识蒸馏的损失函数代码(一)
- python常用字符串_Python中最常用的字符串方法!
- 计算机无法安装ae,Windows10系统AE软件无法安装如何处理
- 基于Python+MySQL的图书销售管理系统 课程论文+项目源码及数据库文件
- 【代码审计】YUNUCMS_v1.0.6 后台代码执行漏洞分析
- opencv之伪彩色处理
- 计算机集成制造ppt英语,计算机集成制造cims
- java零基础Ⅰ-- 1.java 概述
- SSE(Server-Sent Events)| 前后端demo参考
- 实现Vue移动端的PDF预览
热门文章
- Windows Mobile Topics at TechEd 2008
- intellij选择困难症Spring Batch/Data JPA/Integration/MVC/Security/Web Flow/Web Services到底选哪个?
- HBase读写操作流程介绍
- Cython屏蔽GIL锁实践
- ImportError: cannot import name ‘AliPay‘ from ‘alipay‘
- gulp加速hexo的yelee主题
- pycharm new project变成灰色
- Linux如何进入微服务看日志,Linux日志查找与服务器重启
- 华为平板解锁工具_2020年备战考研必选8款平板电脑 平板电脑推荐(12月最新版)...
- java做一个简单的数据库,哪个嵌入式数据库用Java写成一个简单的键/值存储?