答案:C++中priority_queue是基于堆的容器适配器,默认为最大堆,包含<queue>头文件后可定义使用;通过push插入元素,top获取堆顶,pop移除堆顶,empty判空,size返回大小;创建最小堆需指定greater<int>比较方式;自定义类型需提供比较规则,如结构体Task可通过重载operator()实现小优先级优先;常用于Dijkstra等算法,不支持遍历与迭代器。

在C++中,priority_queue 是一个基于堆结构实现的容器适配器,能够自动将元素按优先级排序,默认情况下是最大堆,即队首元素始终是当前队列中最大的。
使用 priority_queue 需要包含头文件 <queue>:
#include <queue> using namespace std;
基本定义方式:
priority_queue<int> pq; // 默认最大堆
priority_queue 支持以下常用操作:
立即学习“C++免费学习笔记(深入)”;
示例代码:
priority_queue<int> pq; pq.push(10); pq.push(30); pq.push(20); cout << pq.top() << endl; // 输出 30 pq.pop(); cout << pq.top() << endl; // 输出 20
默认是最大堆,若需要最小堆,可以通过指定比较方式实现:
priority_queue<int, vector<int>, greater<int>> min_pq; min_pq.push(10); min_pq.push(30); min_pq.push(20); cout << min_pq.top() << endl; // 输出 10
其中 greater<int> 来自 <functional> 头文件,表示小的元素优先级更高。
如果要对自定义结构体使用 priority_queue,需提供比较规则。可以通过重载操作符或自定义比较函数对象。
例如,处理一个任务结构体,按优先级数值越小越优先:
struct Task {
int id;
int priority;
};
struct Compare {
bool operator()(const Task& a, const Task& b) {
return a.priority > b.priority; // 小顶堆
}
};
priority_queue<Task, vector<Task>, Compare> task_pq;
这样,priority_queue 会根据 Compare 规则排序。
基本上就这些。掌握 push、top、pop 和自定义比较方式,就能灵活使用 priority_queue 解决如 Dijkstra、合并K个有序链表等问题。注意它不支持遍历和迭代器,只关注最高优先级元素。
以上就是C++如何使用优先队列(priority_queue)_C++ priority_queue使用方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号