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

STL优先级队列的比较函数与大堆小堆的关系

STL中的priority_queue(优先级队列)通过比较函数来确定元素的优先级顺序,从而决定其内部是形成大堆还是小堆。以下是关键点总结:

  1. 默认行为与大堆

    • 默认情况下,priority_queue使用std::less<T>作为比较函数,形成大堆(最大堆)。
    • 大堆特性:父节点的值总大于或等于子节点,堆顶元素为最大值。
    • 比较逻辑:当a < b返回true时,认为b的优先级更高,较大的元素会被置于堆顶。
  2. 小堆的实现

    • 若使用std::greater<T>作为比较函数,则形成小堆(最小堆)。
    • 小堆特性:父节点的值总小于或等于子节点,堆顶元素为最小值。
    • 比较逻辑:当a > b返回true时,认为b的优先级更高,较小的元素会被置于堆顶。
  3. 比较函数的作用

    • 比较函数Compare接受两个参数ab,返回值为true表示第二个参数b的优先级更高
    • 元素的插入和堆调整均基于此规则,确保堆结构始终符合比较函数定义的顺序。
  4. 示例说明

    // 默认大堆,使用less<T>
    priority_queue<int> max_heap;// 显式小堆,使用greater<T>
    priority_queue<int, vector<int>, greater<int>> min_heap;
    
  5. 自定义比较函数

    • 可通过自定义函数或仿函数定义特殊优先级规则。例如,实现按绝对值大小排列的堆:
    struct AbsCompare {bool operator()(int a, int b) {return abs(a) < abs(b); // 返回true时,b的绝对值更大,优先级更高}
    };
    priority_queue<int, vector<int>, AbsCompare> abs_max_heap;
    

总结:比较函数通过定义元素的优先级顺序(第二个参数是否应优先于第一个参数),直接决定priority_queue是大堆还是小堆。理解比较函数参数的顺序及其返回值对优先级的影响,是正确使用优先级队列的关键。

http://www.lqws.cn/news/159517.html

相关文章:

  • LoRA:大模型高效微调的低秩之道——原理解析与技术实现
  • 代码随想录算法训练营第九天| 151.翻转字符串里的单词、55.右旋转字符串 、字符串总结
  • 25.6.5学习总结
  • day47 TensorBoard学习
  • label-studio的使用教程(导入本地路径)
  • 优化学习笔记
  • 热门消息中间件汇总
  • JAVA-springboot JUnit单元测试
  • 【Android基础回顾】五:AMS(Activity Manager Service)
  • 亚马逊AWS云服务器高效使用指南:最大限度降低成本的实战策略
  • 【二分图 染色法 BFS】B4188 [中山市赛 2024] 参数拟合|普及+
  • 力扣LeetBook数组和字符串--二维数组
  • k8s业务程序联调工具-KtConnect
  • 宠物车载安全座椅市场报告:解读行业趋势与投资前景
  • k8S 命令
  • 攻防世界RE-happyctf
  • AI变革思考2:当小众需求遇上人工智能,催生长尾应用的春天
  • 【学习笔记】MIME
  • 今日科技热点速览
  • 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第十五讲)
  • JS 节流(Throttle)与防抖(Debounce)详解
  • MCP实践
  • MySQL 的锁机制【深度全面】
  • HBuilder 发行Android(apk包)全流程指南
  • Flyway
  • Spring WebFlux 整合AI大模型实现流式输出
  • 数据库优化实战分享:高频场景下的性能调优技巧与案例解析
  • c#基础010(程序结构)
  • 深度解析数字营销专属大模型 AdLLM 的训练思路
  • 监控硬盘可以当台式机硬盘用吗