新闻中心

C++ priority_queue怎么用_C++优先队列常用操作与自定义排序

2025-11-29
浏览次数:
返回列表
priority_queue是C++ STL中基于堆实现的容器适配器,默认为大根堆,支持高效访问最值。包含push、pop、top等操作,适用于Top K问题、Dijkstra算法等场景;通过greater或自定义比较器可实现小根堆及复杂排序逻辑,注意自定义时返回true表示第一个参数优先级更低。

c++ priority_queue怎么用_c++优先队列常用操作与自定义排序

priority_queue 是 C++ STL 中一个非常实用的容器适配器,用于实现堆结构,默认情况下是一个大根堆(最大值优先)。它常用于需要频繁访问最大或最小元素的场景,比如 Dijkstra 算法、合并多个有序链表等。

基本用法与常用操作

priority_queue 定义在 头文件中,使用时需包含该头文件。

1. 默认大根堆(最大堆)

默认基于 vector 实现,使用 less 比较器,顶部是最大元素。

priority_queue pq;
pq.push(3);
pq.push(1);
pq.push(4);
cout pq.pop(); // 移除 4
cout

2. 小根堆(最小堆)

通过指定 greater 比较器实现:

priority_queue, greater> min_pq;
min_pq.push(3);
min_pq.push(1);
min_pq.push(4);
cout

3. 常用成员函数

  • push(x):插入元素 x,自动调整堆结构
  • pop():移除堆顶元素(不返回)
  • top():返回堆顶元素(只读)
  • empty():判断是否为空
  • size():返回元素个数

例如:

while (!pq.empty()) {
    cout     pq.pop();
}

自定义排序规则

当存储的是结构体或类对象时,需要自定义比较方式。

方法一:重载运算符

N世界 N世界

一分钟搭建会展元宇宙

N世界 138 查看详情 N世界

适用于 struct 或 class,重载小于号以控制优先级。注意:priority_queue 默认是大根堆,所以 较小的元素优先级低

若想让 a 的优先级高于 b,应使 a

struct Person {
    string name;
    int age;
    bool operator         return age     }
};

priority_queue pq;
pq.push({"Alice", 25});
pq.push({"Bob", 30});
cout

方法二:自定义比较结构体

更灵活的方式,尤其适合小根堆或多条件排序。

struct Compare {
    bool operator()(const Person& a, const Person& b) {
        return a.age     }
};
priority_queue, Compare> pq;

如果想要年龄小的优先(小根堆),改为:

return a.age > b.age;

方法三:Lambda 表达式(需结合容器声明)

不能直接用于 priority_queue 模板参数,但可以配合 decltype 使用:

auto cmp = [](int a, int b) { return a > b; };
priority_queue, decltype(cmp)> pq(cmp);
pq.push(3); pq.push(1);
cout

常见应用场景

  • Top K 问题:维护大小为 K 的小根堆,遍历数组找出最大的 K 个数
  • 合并 K 个有序链表:将每个链表头节点放入最小堆,每次取出最小节点并加入其后继
  • 任务调度:按优先级处理任务,高优先级任务先执行

基本上就这些。掌握默认用法、会写自定义比较器,就能应对大多数情况。注意堆不支持遍历和随机访问,只能操作堆顶。自定义排序时,牢记“返回 true 表示第一个参数优先级更低”。

以上就是C++ priority_queue怎么用_C++优先队列常用操作与自定义排序的详细内容,更多请关注其它相关文章!


# 更低  # 龙感湖seo推广机构  # 网站建设域名解析方法  # 做推广网站公示易速达  # 精通seo原理  # 泉州网站建设建站系统  # seo推广选火星推荐  # 网站引流推广诈骗套路  # 木头人网络营销推广  # 保定网站建设知识框架图  # 抖音如何搜关键词排名  # c++  # 解决方法  # 重写  # 链表  # 适用于  # 遍历  # 第一个  # 有什么  # 运算符  # 自定义 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法  Django表单验证失败时保留用户输入数据的最佳实践  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析  Spring Boot内嵌服务器与J*a EE全栈特性:选择与部署策略  AO3中文官网链接_AO3网页版稳定镜像站  海棠账号登录入口_登录海棠账户同步阅读记录  React Router v6 教程:构建认证保护的私有路由与重定向策略  离线运行Go语言之旅:本地部署与GOPATH配置指南  Golang如何测试channel通信行为_Golang channel通信测试与分析方法  Python多版本共存与虚拟环境管理深度指南  PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程  Go语言中Map存储的结构体如何调用指针方法:深入解析与实践  J*aScript Promise链中如何正确终止后续.then执行并处理错误  漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端  J*aScript中针对特定容器内图片动画的实现教程  J*aScript 字符串标签转换:使用正则表达式高效替换  百度网盘网页版入口 百度网盘网页版官方登录网址  qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程  Centos/Linux 系统下安装 composer 的完整步骤  漫蛙2正版漫画站 漫蛙2网页版快速访问入口  微信群消息显示延迟如何解决 微信群消息刷新优化方法  印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】  Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询  Go语言JSON解析深度指南:动态访问与结构体映射实践  谷歌浏览器怎么给标签页静音_Chrome标签静音快捷操作  构建轻量级网站内部消息系统:Formspree 集成指南  Lar*el Form Request中唯一性验证在更新操作中的正确实现  Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性  2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC  PDF文件体积过大处理_PDF压缩技巧详解  ArrayList与LinkedList操作复杂度详解:遍历与修改  夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  AO3网页版合集入口 Archive of Our Own同人作品浏览指南  AO3网页版最新入口合集 Archive of Our Own在线访问指南  在Socket.IO连接中实现Access Token自动更新与动态重连  Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全  C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能  Python自定义类排序:解决lambda键值访问TypeError的实践指南  微博网页版直接访问 微博网页版账号管理快速入口  Win10双系统截图高效法 截屏快捷键速记【技巧】  小米汽车11月交付量突破40000台!雷军:将继续努力  PHP中获取MongoDB服务器运行时间(Uptime)的专业指南  Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录  抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩  sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE  动漫花园资源网使用步骤_动漫花园资源网下载流程  菜鸟取件码是什么怎么查 最全查询渠道汇总  使用Pandas转换并合并DataFrame:多列映射至统一结构 

搜索