首页 > 后端开发 > C++ > 正文

c++ priority_queue怎么用 c++优先队列用法【详解】

裘德小鎮的故事
发布: 2025-12-22 17:41:02
原创
208人浏览过
priority_queue是C++ STL中基于堆的容器适配器,默认为最大堆,仅支持push、top、pop等操作;可用greater实现最小堆;自定义类型需重载operator

c++ priority_queue怎么用 c++优先队列用法【详解】

priority_queue 是 C++ STL 中的容器适配器,底层默认基于最大堆实现,用来高效获取当前集合中“优先级最高”的元素(比如最大值或最小值)。它不支持遍历、查找或随机访问,只提供入队(push)、出队(top + pop)、判空(empty)等基本操作。

基本声明与默认行为

默认情况下,priority_queue 是一个最大堆:每次 top() 返回的是当前最大的元素。

  • priority_queue q; —— 存储 int,自动按降序排列(大根堆)
  • q.push(3); q.push(1); q.push(4); → 调用 q.top() 得到 4
  • 注意:不能用 q[0] 或迭代器访问内部元素

如何实现最小堆(升序/取最小值)

只需显式指定比较器:greater,让底层按升序建堆(小根堆)。

腾讯智影
腾讯智影

腾讯推出的在线智能视频创作平台

腾讯智影 341
查看详情 腾讯智影
  • priority_queue, greater> min_q;
  • 或者更简洁写法:priority_queue, greater> min_q;(C++14 起支持)
  • 此时 min_q.top() 返回最小值

自定义类型怎么用?需要重载比较逻辑

对结构体或类,必须提供比较规则。推荐方式是重载 operator,并让它表示“优先级更低”(即堆顶要的是“更大”的那个)。

立即学习C++免费学习笔记(深入)”;

  • 例如按学生分数从高到低排序,分数高者优先:
  • struct Student {
      string name;
      int score;
      bool operator};
    priority_queue pq;
  • 如果想按姓名字典序升序排(A 在前),就写 name > b.name —— 因为 定义的是“谁该被压在下面”,不是“谁该在顶上”

常用操作和注意事项

  • q.push(x) —— 插入元素,时间复杂度 O(log n)
  • q.top() —— 查看堆顶(不删除),O(1)
  • q.pop() —— 删除堆顶,O(log n)
  • q.empty(), q.size() —— 判空和大小,都是 O(1)
  • 没有 clear(),清空可循环 pop() 或直接 q = priority_queue();
  • 底层容器默认是 vector,也可换为 deque(但一般没必要)

以上就是c++++ priority_queue怎么用 c++优先队列用法【详解】的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号