全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++中的优先队列(priority_queue)怎么用?C++ STL容器使用教程【数据结构】

优先队列是基于堆的容器适配器,默认大根堆,仅支持push、top、pop等操作;改小根堆需用greater、lambda或自定义比较结构体;不支持遍历、查找、修改中间元素。

优先队列在 C++ 中不是真正意义上的“队列”,而是一个基于堆(默认大根堆)的容器适配器,用来快速获取当前最大(或最小)元素。它底层依赖 vectormake_heap 等机制,不支持遍历、查找或修改中间元素,只保证 队首始终是优先级最高者

基本用法:默认大根堆

默认情况下,priority_queue 是最大堆,顶部元素最大:

  • 声明:priority_queue pq;
  • 插入:pq.push(3); pq.push(1); pq.push(4);
  • 访问顶部:pq.top() → 返回 4(不删除)
  • 弹出顶部:pq.pop(); → 移除 4,新顶为 3
  • 判空/大小:pq.empty()pq.size()

改成小根堆的三种写法

要让最小元素在顶部,需显式指定比较器。常用方式有:

  • greater(需加头文件 ):
    priority_queue, greater> min_pq;
  • 用 lambda(C++20 起支持,但需配合自定义容器类型,较麻烦)
  • 写结构体重载 operator()(适合复杂类型):
    struct cmp { bool operator()(int a, int b) { return a > b; } };
    priority_queue, cmp> min_pq;

存自定义类型(比如 pair 或结构体)

只要提供合法的比较逻辑即可。例如按 pair 的 first 升序排列(小顶):

  • 直接用 greater> —— 它按字典序比较,适用于 first 相同时比 second
  • 更稳妥的方式是自定义比较器:
    auto cmp = [](const pair& a, const pair& b) { return a.first > b.first; };
    priority_queue, vector>, decltype(cmp)> pq(cmp);

注意:自定义比较器必须满足「严格弱序」,且不能用 = 判断相等(应返回 false)。

常见误区和注意事项

优先队列不是万能排序工具,使用时要注意:

  • 不支持迭代器遍历:for (auto x : pq) ❌ 编译失败
  • 不支持随机访问:pq[0] ❌ 没有下标操作符
  • 修改元素后不会自动调整堆:想改某个值?只能 pop 出来、改完再 push 回去(效率低,慎用)
  • 底层容器可换,但极少需要:priority_queue> 合法但无实际优势

基本上就这些。用对场景(比如 Top-K、合并 K 个有序链表、Dijkstra 权值更新),它非常高效;乱当普通容器用,反而容易踩坑。


# 工具  # ai  # c++  # 排列  # String  # for  # const  # auto  # 结构体  # bool  # int  # Lambda  # 数据结构  #   # Struct  # operator  # 自定义  # 不支持  # 遍历  # 升序  # 适用于  # 弹出  # 三种  # 要让  # 不能用  # 时要 


相关文章: 网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  如何在Windows服务器上快速搭建网站?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  怎么将XML数据可视化 D3.js加载XML  如何设计高效校园网站?  个人网站制作流程图片大全,个人网站如何注销?  实现虚拟支付需哪些建站技术支撑?  如何在IIS7中新建站点?详细步骤解析  寿县云建站:智能SEO优化与多行业模板快速上线指南  如何在服务器上三步完成建站并提升流量?  网站图片在线制作软件,怎么在图片上做链接?  ,网站推广常用方法?  如何在建站宝盒中设置产品搜索功能?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  定制建站策划方案_专业建站与网站建设方案一站式指南  如何快速搭建高效可靠的建站解决方案?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  建站之星24小时客服电话如何获取?  七夕网站制作视频,七夕大促活动怎么报名?  如何快速生成凡客建站的专业级图册?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  建站主机选购指南:核心配置与性价比推荐解析  成都网站制作公司哪家好,四川省职工服务网是做什么用?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  如何在Ubuntu系统下快速搭建WordPress个人网站?  如何在阿里云服务器自主搭建网站?  如何在IIS中新建站点并配置端口与物理路径?  如何通过主机屋免费建站教程十分钟搭建网站?  nginx修改上传文件大小限制的方法  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  如何在IIS中新建站点并配置端口与IP地址?  如何用景安虚拟主机手机版绑定域名建站?  建站OpenVZ教程与优化策略:配置指南与性能提升  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  建站主机选哪种环境更利于SEO优化?  Swift开发中switch语句值绑定模式  建站三合一如何选?哪家性价比更高?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  网站设计制作企业有哪些,抖音官网主页怎么设置?  如何在阿里云域名上完成建站全流程?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  招商网站制作流程,网站招商广告语?  宁波免费建站如何选择可靠模板与平台?  活动邀请函制作网站有哪些,活动邀请函文案?  如何在万网开始建站?分步指南解析  如何撰写建站申请书?关键要点有哪些?  如何快速搭建支持数据库操作的智能建站平台? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。