当前位置: 首页 > news >正文

cpp重写堆的比较函数

之前写Leetcode的时候,总是对堆(priority_queue)的比较函数有一些疑问,
比如:

  1. greater和less函数的意义是什么,为什么传入greater函数后就是小顶堆,传入less就是大顶堆
  2. 如果需要重写cmp函数,为什么大顶堆需要重写<,而小顶堆重写>
  3. 到底cmp函数要表达怎样的含义,才能达到大顶堆or小顶堆的含义
    在这之前需要搞明白几件事
  4. greater函数和less函数的意义
  5. 为什么要重写结构体的<或者>

greater & less

greater函数意义

template <class T> struct greater {
  bool operator() (const T& x, const T& y) const {return x>y;}
  typedef T first_argument_type;
  typedef T second_argument_type;
  typedef bool result_type;
};

less函数意义

template <class T> struct less {
  bool operator() (const T& x, const T& y) const {return x<y;}
  typedef T first_argument_type;
  typedef T second_argument_type;
  typedef bool result_type;
};

可以看到在传入模板T后,需要依赖两个类型的<或者>来判断,所以这也解释了为什么
在小根堆的greater里,x>y时代表x的优先级更高,y会排在top位置,先出堆(因为是小根堆)。

总结

在小根堆重写>时,要注意到x>y会导致y先出堆。在大根堆重写<时,x<y时会让y先出堆。总的来说,只需要严格地按照优先级书写<或者>,大根堆或者小根堆的性质已经由greater和less界定好了

相关文章:

  • 手写RPC框架-V1版本
  • 无人机与AI!
  • MyBatis-Plus注解配置:@TableName、@TableId、@TableField
  • 浙江大学《程序设计入门-c语言》第一周笔记
  • Java进阶——Stream流以及常用方法详解
  • 蓝桥杯 - 简单 - 俄罗斯方块
  • IDEAPyCharm安装ProxyAI(CodeGPT)插件连接DeepSeek-R1教程
  • 学术小助手智能体
  • rust学习~tokio的io
  • 网络安全技术概述
  • 【安卓】BroadcastReceiver 动态声明为 RECEIVER_NOT_EXPORTED 后无法接收任何 Intent 的问题
  • 结构化方法SASD
  • openGauss数据库使用
  • 谈谈 Node.js 中的文件系统(fs)模块,如何进行文件读写操作?
  • CSS—背景属性与盒子模型(border、padding、margin)
  • 越南SD-WAN跨境组网专线助力制造业访问国内 OA、ERP系统难题
  • Go基于协程池的延迟任务调度器
  • 《Kafka 理解: Broker、Topic 和 Partition》
  • 【leetcode】二分查找专题
  • 打造爆款秘籍:利用ARA数据优化亚马逊广告策略
  • 网站规划建设与管理维护的论文/网络宣传平台有哪些
  • 网站的产品图片怎样做清晰/视频号推广
  • 怎么盗号网站怎么做/百度推广后台登陆首页
  • 用花生壳免费域名做公司网站/百度招商客服电话
  • 泰兴做网站的公司/中文域名交易平台
  • 学校网站建设策划书/seo免费培训