c++中的堆(优先级队列 priority_queue)
大顶堆,小顶堆的数据结构在我们需要处理在最大值和最小值的问题上给我们提供很好的工具。
例如:大鱼吃小鱼的游戏,给出一组非负元素代表每条鱼的F值,每一轮F值最小的一条鱼都会被F值第二小的鱼吃掉,并且新鱼F值为原来F值和吃掉的鱼F值之和:
F(新)=F(原来)+F(吃掉的)
问第m轮后最小的鱼F值为多少?(注:F值相同的话任意可选取任意一条)
我们可以利用小顶堆来实现:
每轮:弹出两个值,代表最小的和第二小的鱼,求和后插入;
最后弹出堆顶即为所要求的的值。
c++里使用优先队列创建:
//升序队列 小顶堆 最小值在堆顶
priority_queue <int,vector<int>,greater<int> > que;
//降序队列 大顶堆 最大值在堆顶
priority_queue <int,vector<int>,less<int> >que;
传入参数分别为:数据类型、容器类型、比较方式(默认是大顶堆)
常见操作有:
- empty 队列是否为空
- top 访问队头元素
- size 返回队列内元素个数
- push 插入元素到队尾 (并排序)
- pop 弹出队头元素
实现代码:
#include<iostream>
#include<vector>
#include<queue>
using namespace std;int main()
{int n, m; //输入n、m n:鱼条数,m:进行吃的轮数cin >> n >> m;priority_queue <int, vector<int>, greater<int> > q; //小顶堆//priority_queue <int, vector<int>, less<int> >q; //大顶堆{int x;cin >> x;q.push(x);}for (int i = 0; i < m;++i){int last1 = q.top();q.pop();int last2 = q.top();q.pop();int sum = last1 + last2;q.push(sum);}cout << q.top();return 0;
}
例如:输入
5 3
5 7 11 9 3
(1)轮:7 8 9 11
(2)轮:9 11 15
(3)轮:15 20
输出:15
c++中的堆(优先级队列 priority_queue)相关推荐
- 6-5-3:STL之stack和queue——优先级队列-priority_queue(堆)的基本使用和模拟实现以及仿函数
文章目录 一:优先级队列-priority_queue(堆) (1)基本使用 (2)模拟实现 二:仿函数 (1)仿函数是什么 (2)使用仿函数完成大顶堆和小顶堆的构建 一:优先级队列-priority ...
- 详解优先级队列priority_queue(应用+模拟实现)
优先级队列的概念 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元 素 ...
- 优先级队列priority_queue
优先级队列priority_queue 优先级队列是一个拥有权值的queue,其内部元素按照元素的权值排列.权值较高者排在最前优先出队.其中缺省情况下系统是通过一个max-heap以堆实现完成排序特性 ...
- 【C++】优先级队列priority_queue仿函数
这里先简单介绍一下优先级队列priority_queue:优先队列是一种容器适配器,默认的情况下,如果没有为特定的priority_queue类实例化指容器类,则使用vector (deque 也是可 ...
- (P85)stl(十三):容器适配器,stack,queue,优先级队列priority_queue,make_heap
文章目录 1.容器适配器 2.stack 3.queue 4.优先级队列priority_queue 5.make_heap 6.set 1.容器适配器 利用基本容器构造的容器,称之为容器适配器 基本 ...
- STL学习系列七:优先级队列priority_queue容器
1.简介 最大值优先级队列.最小值优先级队列 优先级队列适配器 STL priority_queue 用来开发一些特殊的应用,请对stl的类库,多做扩展性学习 这里给个例子: #include< ...
- C++ STL 学习笔记__(6)优先级队列priority_queue基本操作
10.2.7优先级队列priority_queue v 最大值优先级队列.最小值优先级队列 v 优先级队列适配器 STL priority_queue v 用来开发一些特殊的应用,请对stl的类 ...
- 【C++】优先级队列priority_queue/仿函数(函数对象)
这里写目录标题 一.优先级队列 1.优先级队列的介绍 2.priority_queue的定义与使用 二.仿函数/函数对象 三.优先级队列的模拟实现 一.优先级队列 1.优先级队列的介绍 1)注意优先级 ...
- C++ 优先级队列 priority_queue
优先级队列(priority_queue)是一种容器适配器(container adaptor).它要求容器具有front.push_back.pop_back等操作,并且容器具有随机访问的能力,故优 ...
- STL之优先级队列priority_queue
摘要: priority_queue,自适应容器(即容器适配器):不能由list来组建: 最大值优先级队列(最大值始终在对首,push进去时候) 最小值优先级队列: 优先级队列适配器 STL pri ...
最新文章
- 数据分析IJCAI 2020:录用率12.6%,华人占据半壁江山,表征学习、GNN成热点 | AI日报...
- 智能媒体管理服务控制台功能体验
- 不同视图间的跳转方式
- IOS_CGRect
- 如何下载python模块_Python第三方库(模块)下载和安装(使用pip命令)
- LeetCode 1450. 在既定时间做作业的学生人数
- 信息学奥赛一本通 1205:汉诺塔问题 | OpenJudge 2.2 6261:汉诺塔问题
- --.net 面试题2
- 《Java深入解析》阅读笔记二(运算符与表达式)
- 超像素分割 SLIC算法 使用示例
- matlab simulink光伏发电系统MPPT算法
- 计算机技术与高中英语教学整合,计算机技术与高中英语课程整合的探讨(多媒体英语教学系列论文十篇).doc...
- mt6577驱动开发 笔记版
- 1064 朋友数 (C++)
- Foxmail提示错误421 too many connections【企业邮箱申请】
- Retrofit简单使用(小白都会了)
- excel就绪筛选模式_Excel自动筛选器显示筛选器模式
- 错误1068:依赖服务或组无法启动
- HDU OJ 1998. 奇数阶幻方
- learnopengl 中 pbr的球体算法
热门文章
- 正高职称 程序员_我985毕业33岁正高,职称评审哪里难?轻轻松松过职称
- python中的counter函数_Python的 counter内置函数,统计文本中的单词数量
- python类之间传参_没看懂这11 条,别说你精通 Python 装饰器
- 把文档所有的字体都缩小一号_美观且专业的macOS字体管理工具
- vscode:设置语言为中文
- 从草图到人脸:这篇SIGGRAPH2020论文帮你轻松画出心中的「林妹妹」,开源「计图」实现代码...
- LightGBM算法解析
- tensorflow中的优化器
- 第三章:数组[4Arrays]
- java 执行 jar 包中的 main 方法