priority_queuey用法
priority_queue优先队列,插入进去的元素都会从大到小排好序
PS:在priority_queue<ll, vector<ll>, greater<ll> > pq;
中
第一个参数为数据类型,第二个参数为保存数据的容器(默认为vector<int>
),第三个参数为元素比较函数(默认为less)。//默认算子为less,即小的往前排,大的往后排(出队时序列尾的元素出队)
struct cmp { operator bool ()(int x, int y) { return x > y; // x小的优先级高 //也可以写成其他方式,如: return p[x] > p[y];表示p[i]小的优先级高}
};
priority_queue<int, vector<int>, cmp>q; //定义方法
//其中,第二个参数为容器类型。第三个参数为比较函数。
优先队列试图将两个元素x和y代入比较运算符(对less算子,调用x<y,
对greater算子,调用x>y
),若结果为真,则x排在y前面,y将先于x出队,反之,则将y排在x前面,x将先出队。
STL里面默认用的是 vector. 比较方式默认用 operator< , 所以如果你把后面俩个参数缺省的话,优先队列就是大顶堆,队头元素最大。
基本操作:
empty() 如果队列为空返回真
pop() 删除队顶元素
push() 加入一个元素
size() 返回优先队列中拥有的元素个数
top() 返回优先队列队顶元素(队列中的front()变成了top())
在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。
例子
UVA136 - Ugly Numbers
Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence
1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, …
shows the first 11 ugly numbers. By convention, 1 is included.
Write a program to find and print the 1500’th ugly number.
Input
There is no input to this program.
Output
Output should consist of a single line as shown below, with ‘’ replaced by the number
computed.
Sample Output
The 1500’th ugly number is <number>
/*
丑数就是所有是2或3或5倍数的数。
用优先队列从小到大排列丑数
用set集合判断丑数是否重复
*/#include <iostream>
#include <vector>
#include <queue>
#include <set>
using namespace std;
typedef long long LL;
const int coeff[3]={2,3,5}; int main(){/*PS:在priority_queue<ll, vector<ll>, greater<ll> > pq;中第一个参数为数据类型,第二个参数为保存数据的容器(默认为vector<int>),第三个参数为元素比较函数(默认为less)。*/ priority_queue<LL,vector<LL>,greater<LL> > pq;set<LL> s;pq.push(1);s.insert(1);for(int i=1;;i++){//pq存的第一个数的2,3,5倍找出存到set和pq里并删除pq第一个数,直至第1500个数 LL x=pq.top();pq.pop();if(i==1500){cout<<"The 1500'th ugly number is "<<x<<".\n";break;}for(int j=0;j<3;j++){ LL x2=x*coeff[j];if(!s.count(x2)){s.insert(x2);pq.push(x2);}}}return 0;
}
priority_queuey用法相关推荐
- c语言中external,static关键字用法
static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...
- Pandas_transform的用法
先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...
- Python中yield和yield from的用法
yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...
- pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法
squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...
- python yield 和 yield from用法总结
#例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...
- tf.nn.embedding_lookup()的用法
函数: tf.nn.embedding_lookup( params, ids, partition_strategy='mod', name=None, validate_indices=True, ...
- OpenMP用法大全
OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...
- Dorado用法与示例
Dorado用法与示例 dorado用后总结 一.dorado概念 dorado的产品全名是"dorado展现中间件".从产品形态上dorado由两部分组成,第一部分是一个具有AJ ...
- TensorFlow用法
TensorFlow用法 什么是TensorFlow TensorFlow是一个开源软件库,用于使用数据流图进行数值计算.图中的节点表示数学运算,而图的边缘表示流动的多维数据数组(张量).这种灵活的体 ...
最新文章
- cookiesession的QA故事[原理篇]
- 那天,我被拉入一个Redis群聊···
- bind merge r 和join_R语言中的数据合并函数(merge,cbind和rbind)的使用
- Javascript调试技巧整理
- 计算机文档里的东西可以删吗,电脑c盘哪些文件可以删除
- java缓存技术选型,重难点整理
- iOS 更改项目名称
- 日本原装进口雪平锅,煎炸炒煮全搞定,日本人用了 1000 年
- linux rsync 远程同步
- SQLServer常用系统视图
- 与计算机病毒相关的小故事,我和计算机病毒的故事2000字论文
- [计算机网络] - TCP三次握手和四次挥手
- mysql innodb缓冲池_InnoDB 缓冲池
- Deep Learning for NLP Best Practices
- linux[CentOS 6.5] 用户不在 sudoers 文件中,此事将被报告解决方案
- 谷歌google chrome浏览器Chrome版本太旧无法更新chrome无法更新至最新版本怎么办
- ADO.NET 连接MySQL 8.0.23
- 交换机常用命令及console口配置
- Chinese Segmentation Introduction
- K-空间 在图像变换及重建
热门文章
- 小程序如何跳转到各大电商小程序进行CPS赚钱
- 关于C语言中的Bool类型变量的一点看法
- f5+big+client+android,F5负载均衡 MIBs bigip oid
- 数字图像处理基础与应用学习,第二章
- linux 升级centos7,Linux之从Centos 6.x 升级Centos7
- php最简单漂亮的excel导出,php把数据表导出为Excel表的最简单、最快的方法(不用插件)...
- mysql python连接时、指定的ip地址被转接了_pythonmysql.connector模块使用了错误的IP地址...
- cat3 utp是不是网线_小科普 | 网线也有高低?聊聊网线的差别
- Win11蓝屏100%不重启解决方法
- win7电脑0x000007b蓝屏怎么办