C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器


C++中的priority_queue是基于堆实现的容器适配器,默认为大根堆,提供push、pop、top等操作,时间复杂度为O(log n),可通过std::greater或自定义比较器实现小根堆或自定义优先级,适用于Dijkstra、任务调度等场景。

c++ priority_queue怎么用_c++优先队列底层实现与自定义比较器

C++ 中的 priority_queue 是一个基于堆结构实现的容器适配器,用于快速获取最大(或最小)元素。它默认是一个大根堆,即队头始终是当前优先级最高的元素。本文将介绍它的基本用法、底层实现原理以及如何使用自定义比较器。

基本用法与常见操作

priority_queue 定义在 queue 头文件中,使用方式如下:

#include <queue>
#include <iostream>

// 默认大根堆
std::priority_queue<int> pq;

pq.push(10);
pq.push(30);
pq.push(20);

std::cout << pq.top();  // 输出 30
pq.pop();
std::cout << pq.top();  // 输出 20

常用成员函数包括:

  • push(x):插入元素 x
  • pop():移除堆顶元素
  • top():访问堆顶元素(不删除)
  • empty():判断是否为空
  • size():返回元素个数

底层实现原理

priority_queue 底层基于 堆(heap) 实现,通常使用 vectordeque 作为存储结构。标准库通过 make_heappush_heappop_heap 等算法维护堆性质。

每次 push 操作会将元素插入尾部,然后向上调整(上浮)以保持堆序;pop 则将首尾交换后弹出,并向下调整(下沉)恢复堆结构。这两个操作的时间复杂度均为 O(log n)。

由于 priority_queue 是容器适配器,不能直接遍历,也不提供迭代器。

Viggle AI Video Viggle AI Video

Powerful AI-powered animation tool and image-to-video AI generator.

Viggle AI Video 115 查看详情 Viggle AI Video

自定义比较器

默认情况下,priority_queue 使用 std::less 构造大根堆。若要改为小根堆,可指定比较器为 std::greater

std::priority_queue<int, std::vector<int>, std::greater<int>> min_pq;
min_pq.push(10);
min_pq.push(5);
min_pq.push(15);
std::cout << min_pq.top();  // 输出 5

对于自定义类型(如结构体),可以重载比较函数或传入函数对象:

struct Person {
    int age;
    std::string name;
};

// 方式一:重载 operator<
bool operator<(const Person& a, const Person& b) {
    return a.age < b.age;  // 年龄大的优先
}

std::priority_queue<Person> pq;
pq.push({25, "Alice"});
pq.push({30, "Bob"});
std::cout << pq.top().name;  // 输出 Bob

也可以使用 lambda 表达式配合函数对象(需用 decltype 并传入构造参数):

auto cmp = [](const Person& a, const Person& b) {
    return a.age < b.age;  // 小根堆逻辑:年龄小的优先
};
std::priority_queue<Person, std::vector<Person>, decltype(cmp)> pq(cmp);

基本上就这些。掌握 priority_queue 的使用和比较器设计,能有效应对涉及优先级调度、Dijkstra 算法、合并 K 个有序链表等典型问题。理解其堆基础也有助于分析性能和调试行为。

以上就是C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器的详细内容,更多请关注其它相关文章!


# 如何在  # 优化网站过度有什么影响  # 绥化seo公司如何引流  # 百度专利seo  # 四川网站优化seo  # seo学校的作用  # 竞价与推广营销策略研究  # 恩施网站建设多少钱  # 酷狗怎么推广自己网站  # 什么是营销号抖音推广的  # 九江食品厂网络营销推广  # 均为  # 遍历  # c++优先队列  # 编程技巧  # 也不  # 如何实现  # 四种  # 是一个  # 自定义  # AI-powered  # 标准库  # stream  # ios  # c++ 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  优化长HTML属性值:SonarQube警告与实用策略  OPPO A3 WiFi频繁断开怎么办 OPPO A3网络优化技巧  J*aScript模块加载器_RequireJS原理分析  盲鳗善于分泌黏液猜猜主要用来做什么  WPS长文档分栏排版不乱方法_WPS分栏+分节符报纸排版教程  腾讯QQ邮箱官方入口 QQ邮箱网页版登录平台  如何测试您的网站全球打开速度-网站海外测速工  《随手记》启用语音备注方法  《友玩*》创建群聊方法  易车网官网直达入口 易车网在线登录入口  pubmed数据库官方主页_pubmed学术论文查找官网直达  搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能  《oppo商城》维修服务位置  《植物大战僵尸3》火龙草作用介绍  抖音网页版官方链接 抖音网页版官网链接入口  163邮箱在线登录 163邮箱网页版在线入口  C#解析来自网络的XML流数据 实时错误处理与重试机制  Python定时发送QQ消息  狙击外星人小游戏在线链接_狙击外星人小游戏网页链接  邦丰播放器频道搜索设置  晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制  《大学搜题酱》官网地址登录  抖音如何进行蓝V认证 抖音企业号申请所需资料与流程  服装短视频如何起号推广?服装短视频起号推广有什么要求?  HTML中多图片上传与预览:解决ID冲突的专业指南  Animex动漫社正版在线入口 Animex动漫社动漫官方观看网  漫蛙manwa漫画官网链接_漫蛙manwa最新可用网址推荐  我居然低估了 DeepSeek,这次更新它做到了这些!  汽水音乐官方网站登录入口_汽水音乐网页版进入链接  苹果手机如何清理系统缓存数据 iPhone非越狱清理垃圾文件的技巧【系统优化】  如何取消数字签名  三角洲行动2025年9月10日摩斯密码分享  如何在CSS中实现盒模型多列间距_grid-gap与padding结合  折叠屏手机充不进电是什么问题? 特殊结构带来的维修难点  小米手机屏幕失灵乱跳怎么办 屏幕触控问题自检与临时解决方法【应急】  mysql归档数据怎么导出为csv_mysql归档数据导出为csv文件的方法  PHP与SQL实践:高效实现数据复制与特定列值修改  Go语言中方法接收器的选择:值类型还是指针类型?  手机耗电快是什么原因 延长手机电池续航时间的设置方法【详解】  Win10如何彻底关闭OneDrive Win10禁用云同步功能【纯净】  汽水音乐网页端访问 汽水音乐官方网页直达  行者app怎样导出日志  《i莞家》修改昵称方法  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  鲨鱼剧场app金币获取方法  J*aScript文本高亮功能优化:解决多词匹配错误与精确分割策略  mysql数据库索引类型有哪些_mysql索引类型解析  Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】 

 2025-11-29

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.