文章目录

  • 1、问题描述
  • 2、具体分析
  • 3、其他方式
  • 4、用最小堆解决问题

1、问题描述

通常在刷题的时候,会遇到最大堆、最小堆的问题,这个时候如果自己去实现一个也是OK的,但是通常时间不太够,那么如何处理?这时,就可以借助C++ STL的priority_queue。

2、具体分析

  • 需要注意的是,C++ STL默认的priority_queue是将优先级最大的放在队列最前面,也即是最大堆。那么如何实现最小堆呢?

假设有如下一个struct:

struct Node {int value;int idx;Node (int v, int i): value(v), idx(i) {}friend bool operator < (const struct Node &n1, const struct Node &n2) ;
};inline bool operator < (const struct Node &n1, const struct Node &n2) {return n1.value < n2.value;
}priority_queue<Node> pq; // 此时pq为最大堆

如果需要最小堆,则需要如下实现:

struct Node {int value;int idx;Node (int v, int i): value(v), idx(i) {}
//  friend bool operator < (const struct Node &n1, const struct Node &n2) ;friend bool operator > (const struct Node &n1, const struct Node &n2) ;
}; inline bool operator > (const struct Node &n1, const struct Node &n2) {return n1.value > n2.value;
}priority_queue<Node, vector<Node>, greater<Node> > pq; // 此时greater会调用 > 方法来确认Node的顺序,此时pq是最小堆

3、其他方式

当然,还有些比较小的较为hack的手段进行。比如要构造一个int类型的最小堆:

priority_queue<int> pq; //
pq.push( -1 * v1) ; //
pq.push( -1 * v2) ; //
pq.push( -1 * v3) ; // 分别是插入v1, v2, v3变量的相反数,那么pq其实也就变相成为了最小堆,只是每次从pq取值后,要再次乘以-1即可

4、用最小堆解决问题

Codeforces Round #536 (Div. 2), problem: (D) Lunar New Year and a Wander

推荐阅读这篇博客——Codeforces Round #536 (Div. 2), problem: (D) Lunar New Year and a Wander 【最小堆+bfs】

学如逆水行舟,不进则退

2020 C++ priority_queue 最大堆与最小堆介绍相关推荐

  1. 数据结构与算法--二叉堆(最大堆,最小堆)实现及原理

    二叉堆(最大堆,最小堆)实现及原理 二叉堆与二叉查找树一样,堆也有两个性质,即结构性质和堆性质.和AVL树一样,对堆的一次操作必须到堆的所有性质都被满足才能终止,也就是我们每次对堆的操作都必须对堆中的 ...

  2. 如何构造最大堆和最小堆?

    最大堆和最小堆又叫大顶堆和小顶堆(大根堆和小根堆),是二叉树的一种排列方式. 最大堆:根结点的键值是所有堆结点键值中最大者,且每个结点的值都比其孩子的值大. 最小堆:根结点的键值是所有堆结点键值中最小 ...

  3. C++判断一个序列是否为堆(最大堆、最小堆)

    参考:https://blog.csdn.net/guoweimelon/article/details/50904346 1.如何判断一个序列是不是堆? 把这个序列看成是数组型的二叉树,如果根节点是 ...

  4. 最大堆和最小堆和平衡二叉树_最小堆二叉树

    最大堆和最小堆和平衡二叉树 A Min Heap Binary Tree is a Binary Tree where the root node has the minimum key in the ...

  5. 最大堆和最小堆(数据结构)

    堆和栈的区别: 一.空间分配区别: 栈(操作系统):由操作系统自动分配释放,存放函数的参考值,局部变量的值等.其操作方式类似于数据结构中的栈 堆(操作系统):一般由程序员分配释放,若程序员不释放,程序 ...

  6. 堆(一)最大堆和最小堆的实现

    最大堆和最小堆的实现 这一讲讲的还是堆,因此将它归入到堆(一)中.这一篇博客的目的非常简单,就是补充一下堆的实现代码.Heap是抽象类,它有两个子类,MaxHeap和MinHeap.回顾一下堆的性质: ...

  7. 最大堆和最小堆基本概念(以及栈和堆的区别)

    堆和栈的区别: 一.堆栈空间分配区别: 1.栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈: 2.堆(操作系统): 一般由程序员分配释放, ...

  8. C++实现最大堆和最小堆

    堆 堆数据结构是一种数组对象,它可以被视为一颗完全二叉树结构(或者也有可能是满二叉树) 最大堆: 任一结点的关键码均大于等于它的左右孩子的关键码,其中堆顶的元素最大.(任一路径中的元素升序排列) 最小 ...

  9. 数据结构——最大堆和最小堆(C语言)

    定义: 最大堆和最小堆都是一棵完全二叉树. 最大堆:是指根节点的关键字值是堆中的最大关键字值,且每个节点若有儿子节点,其关键字值都不小于其儿子节点的关键字值. 最小堆:是指根节点的关键字值是堆中的最小 ...

最新文章

  1. srping atomikos 的jta 事物管理
  2. C2679 二进制 没有找到接受 std::string 类型的右操作数的运算符(或没有可接受的转换)
  3. C++:=default一些说明
  4. python函数默认参数作用域
  5. java emma_java-使用emmarun(找不到主要方法)
  6. 从零开始学习OpenCL开发(一)架构
  7. Python---查找序列的最长递增子序列
  8. 剑指Offer - 面试题47. 礼物的最大价值(动态规划)
  9. 语法和c区别_史冠新 | 汉语语法单位辨正
  10. 专访OPPO Find X5产品经理:深耕自研芯片 以最高标准打造极致旗舰体验
  11. 计算机科学与量子信息处理,量子计算交叉学科
  12. 最受欢迎 Top 12 Python 开源框架,你都用过吗?| 原力计划
  13. 【网络安全】从零开始的CTF生活
  14. 55.Linux/Unix 系统编程手册(下) -- 文件加锁
  15. DirectX截图黑屏的解决办法
  16. linux服务器离线安装python第三方库
  17. android常用刷机指令,【高级技术】Android刷机常用adb指令集合
  18. 如何用excel制作xy曲线图_如何用excel制作表格?
  19. 数据挖掘:数据清洗——缺失值处理
  20. 未来计算机手抄报图片,【科技与未来手抄报图片大全】未来科技手抄报图片_科技创造未来手抄报设计_亲亲宝贝网...

热门文章

  1. maven获取所有依赖项
  2. 网络对抗 Exp7 网络欺诈防范 20154311 王卓然
  3. c2-00支持java_诺基亚双卡双待C2-00亮相
  4. 和小朋友分享一些Scratch学习的心得一
  5. statusBar控件
  6. a标签,相对地址,绝对地址,锚点技术
  7. BAPI_INCOMINGINVOICE_CREATE 发票校验
  8. 曲线绕x轴旋转曲面方程_曲线C绕y轴旋转所成的旋转曲面的方程为.PPT
  9. MGN(多粒度网络)模型训练的详细步骤
  10. IntelliJ IDEA注释字体形式修改