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用法相关推荐

  1. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  2. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  3. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  4. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  5. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

  6. tf.nn.embedding_lookup()的用法

    函数: tf.nn.embedding_lookup( params, ids, partition_strategy='mod', name=None, validate_indices=True, ...

  7. OpenMP用法大全

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

  8. Dorado用法与示例

    Dorado用法与示例 dorado用后总结 一.dorado概念 dorado的产品全名是"dorado展现中间件".从产品形态上dorado由两部分组成,第一部分是一个具有AJ ...

  9. TensorFlow用法

    TensorFlow用法 什么是TensorFlow TensorFlow是一个开源软件库,用于使用数据流图进行数值计算.图中的节点表示数学运算,而图的边缘表示流动的多维数据数组(张量).这种灵活的体 ...

最新文章

  1. cookiesession的QA故事[原理篇]
  2. 那天,我被拉入一个Redis群聊···
  3. bind merge r 和join_R语言中的数据合并函数(merge,cbind和rbind)的使用
  4. Javascript调试技巧整理
  5. 计算机文档里的东西可以删吗,电脑c盘哪些文件可以删除
  6. java缓存技术选型,重难点整理
  7. iOS 更改项目名称
  8. 日本原装进口雪平锅,煎炸炒煮全搞定,日本人用了 1000 年
  9. linux rsync 远程同步
  10. SQLServer常用系统视图
  11. 与计算机病毒相关的小故事,我和计算机病毒的故事2000字论文
  12. [计算机网络] - TCP三次握手和四次挥手
  13. mysql innodb缓冲池_InnoDB 缓冲池
  14. Deep Learning for NLP Best Practices
  15. linux[CentOS 6.5] 用户不在 sudoers 文件中,此事将被报告解决方案
  16. 谷歌google chrome浏览器Chrome版本太旧无法更新chrome无法更新至最新版本怎么办
  17. ADO.NET 连接MySQL 8.0.23
  18. 交换机常用命令及console口配置
  19. Chinese Segmentation Introduction
  20. K-空间 在图像变换及重建

热门文章

  1. 小程序如何跳转到各大电商小程序进行CPS赚钱
  2. 关于C语言中的Bool类型变量的一点看法
  3. f5+big+client+android,F5负载均衡 MIBs bigip oid
  4. 数字图像处理基础与应用学习,第二章
  5. linux 升级centos7,Linux之从Centos 6.x 升级Centos7
  6. php最简单漂亮的excel导出,php把数据表导出为Excel表的最简单、最快的方法(不用插件)...
  7. mysql python连接时、指定的ip地址被转接了_pythonmysql.connector模块使用了错误的IP地址...
  8. cat3 utp是不是网线_小科普 | 网线也有高低?聊聊网线的差别
  9. Win11蓝屏100%不重启解决方法
  10. win7电脑0x000007b蓝屏怎么办