C++如何使用priority_queue_C++优先队列容器与应用示例


priority_queue是C++ STL中基于堆的容器适配器,默认为最大堆,常用于任务调度、Dijkstra算法等场景。1. 基本用法:包含头文件,定义方式有priority_queue pq(最大堆)和priority_queue pq(最小堆),常用操作包括push、pop、top、empty和size。示例输出为30 20 10。2. 自定义比较:可通过重载operator

c++如何使用priority_queue_c++优先队列容器与应用示例

在C++中,priority_queue 是标准模板库(STL)提供的一个容器适配器,用于实现优先队列。它基于堆结构,默认情况下使用最大堆,即每次取出的元素是当前队列中最大的。它常用于需要按优先级处理数据的场景,比如任务调度、Dijkstra最短路径算法等。

1. priority_queue的基本用法

头文件: 使用 #include 即可引入 priority_queue。

定义方式:

  • priority_queue<int> pq;</int>:默认最大堆,顶部是最大值。
  • priority_queue<int vector>, greater<int>> pq;</int></int>:最小堆,顶部是最小值。

常用操作:

  • pq.push(x):插入元素 x。
  • pq.pop():移除顶部元素(不返回)。
  • pq.top():获取顶部元素。
  • pq.empty():判断是否为空。
  • pq.size():返回元素个数。

示例代码:

#include <iostream>
#include <queue>
using namespace std;
<p>int main() {
priority_queue<int> pq;
pq.push(10);
pq.push(30);
pq.push(20);</p><pre class="brush:php;toolbar:false;">while (!pq.empty()) {
    cout << pq.top() << " ";
    pq.pop();
}
// 输出:30 20 10
return 0;

}

2. 自定义比较函数(结构体或类)

当需要处理自定义类型(如结构体)时,可以通过重载比较运算符或提供比较类来定义优先级规则。

方法一:重载 operator

无限画 无限画

千库网旗下AI绘画创作平台

无限画 574 查看详情 无限画
struct Person {
    string name;
    int age;
    Person(string n, int a) : name(n), age(a) {}
<pre class="brush:php;toolbar:false;">bool operator<(const Person& p) const {
    return age < p.age; // 年龄大的优先级高(最大堆)
}

};

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

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

struct CompareAge {
    bool operator()(const Person& a, const Person& b) {
        return a.age < b.age; // 最大堆
    }
};
priority_queue<Person, vector<Person>, CompareAge> pq;

若想实现年龄小的优先,则改为:a.age > b.age,即可变为最小堆逻辑。

3. 实际应用示例:合并K个有序链表

LeetCode经典题:使用 priority_queue 维护每条链表当前最小节点,每次取出最小值节点加入结果链表。

#include <queue>
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(nullptr) {}
};
<p>struct Compare {
bool operator()(ListNode<em> a, ListNode</em> b) {
return a->val > b->val; // 最小堆:值小的优先
}
};</p><p>ListNode<em> mergeKLists(vector<ListNode</em>>& lists) {
priority_queue<ListNode<em>, vector<ListNode</em>>, Compare> pq;</p><pre class="brush:php;toolbar:false;">for (ListNode* head : lists) {
    if (head) pq.push(head);
}

ListNode dummy(0);
ListNode* tail = &dummy;

while (!pq.empty()) {
    ListNode* node = pq.top(); pq.pop();
    tail->next = node;
    tail = tail->next;
    if (node->next) pq.push(node->next);
}

return dummy.next;

}

该方法时间复杂度为 O(N log k),其中 N 是所有节点总数,k 是链表数量,效率较高。

4. 注意事项与常见问题

  • priority_queue 不支持遍历,只能访问 top 元素。
  • 修改已有元素会破坏堆结构,应避免。
  • 如果需要动态更新优先级,考虑使用 set 或手写堆。
  • 注意自定义比较函数的逻辑方向,greater 表示“更小的优先”,即最小堆。

基本上就这些。掌握 priority_queue 能显著简化很多算法设计,特别是在贪心和图算法中非常实用。熟悉其接口和自定义方式后,使用起来很高效。

以上就是C++如何使用priority_queue_C++优先队列容器与应用示例的详细内容,更多请关注其它相关文章!


# node  # ai  # ios  # stream  # 常见问题  # 自定义  # c++  # 河南网站优化推广怎么样  # 有名气的阿坝网站建设  # 抖音营销推广售后服务  # 惠州网站建设与推广公司  # 衡阳网站建设与设计公司  # 引流求助网站怎么做推广  # 河北数据网站推广介绍  # 深圳google seo培训班  # 网站弹窗推广  # 答疑网站建设方案怎么写  # 是在  # 头文件  # 最小值  # 如何实现  # 链表  # 运算符  # 多核  # 如何使用  # 大堆 


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


相关推荐: c++如何链接Boost库_c++准标准库的集成与使用  Mac hosts文件在哪里_Mac修改hosts文件详细教程  微信如何设置字体大小_微信字体设置的阅读舒适  《我的恋爱逃生攻略》中文名字输入方法  Python自动化抓取GBGB赛狗比赛结果:日期范围与赛道筛选教程  教资成绩怎么查询  Go语言反射机制下访问嵌入结构体中的被遮蔽方法  在Django中动态检查模型关联:一种灵活的解决方案  《暗黑破坏神4》国服回归送狂欢礼包 价值6916元  酷狗音乐多音轨设置教程  sublime如何撤销关闭的标签页_sublime重新打开已关闭文件技巧  139邮箱登录入口官网 139邮箱登录入口官网网址  跨语言测试实践:使用Python Selenium测试现有J*a Web项目  Python csv 模块处理非字符串数据:列表写入 CSV 文件的机制解析  J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制  yandex网页版直接登录 yandex官方入口平台访问方法  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  mail.qq.com登录入口 QQ邮箱网页版直达  奥克斯空调不制热啥毛病_奥克斯空调不制热原因分析及解决技巧  申通快递物流信息查询 申通快递包裹状态追踪  蛙漫2(台版)正版官网 2025免费网页版分享  如何在mysql中使用索引提示_mysql索引提示优化方法  263企业邮箱如何设置邮件转发功能  c++中的const关键字用法大全_c++ const正确使用指南  《海贝音乐》均衡器设置方法  《大周列国志》皇帝律令功能介绍  WooCommerce 购物车:始终显示所有交叉销售商品  《豆瓣》私信用户方法  126手机126邮箱登录_126邮箱手机登录入口官网  Symfony路由参数转换器:实体存在性验证与错误处理策略  mysql镜像配置如何设置用户权限组_mysql镜像配置用户组与权限分级管理方法  SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱  《原神》月之一版本新增书籍一览  《三角洲行动》战斗步枪与机枪类改装代码分享  如何取消数字签名  BunnyStream TUS视频上传指南:解决401认证错误与参数配置  苹果自助维修计划支持哪些设备机型  创客贴登录页面入口 创客贴网页版最新网址链接  《跳跳舞蹈》循环播放方法  谷歌浏览器如何查找和删除恶意软件 谷歌浏览器内置安全清理工具使用教程  偃武诸葛亮阵容搭配推荐  yy漫画登录页面官方入口_yy漫画在线阅读网址入口  聚水潭ERP后台管理系统登录 聚水潭ERP官方登录通道  谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法  Win10通知横幅停留时间修改 Win10自定义通知显示时长【技巧】  《随手记》备份数据方法  抖音火山版如何进行提现  sublime如何配置PHP开发环境_在sublime中运行与调试PHP代码  在VS Code中进行数据科学和机器学习开发  京东快递包裹信息查询入口 京东快递官方查询平台入口 

 2025-11-20

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

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

点击免费数据支持

提交您的需求,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.