C++ priority_queue 优先队列
502 字
3 分钟
C++ priority_queue 优先队列
C++中的优先队列(priority queue)是一种用于维护一组元素构成的集合的容器适配器,其中每个元素都有一个优先级。添加到优先队列中的元素将按照其优先级排序,优先级最高的元素将首先被移除。优先队列通常使用堆(heap)数据结构来实现,以支持高效的元素插入和移除操作。
在C++标准库中,优先队列通过priority_queue模板类提供,该模板类定义在头文件<queue>中。
基本用法
以下是priority_queue的基本用法示例:
#include <iostream>#include <queue>
int main() { // 创建一个int类型的优先队列,默认使用std::less<int>, // 即最大值优先 std::priority_queue<int> pq;
// 向优先队列中插入元素 pq.push(30); pq.push(10); pq.push(20); pq.push(5);
// 遍历优先队列(这不是最好的方法,因为会改变队列内容) while (!pq.empty()) { // 访问队头元素 std::cout << pq.top() << " "; // 移除队头元素 pq.pop(); } std::cout << std::endl;
return 0;}输出结果将是:
30 20 10 5自定义优先级
你可以通过定义自己的比较函数或者重载operator<来实现自定义类型的优先级排序。比如,使用结构体并自定义优先级规则:
#include <iostream>#include <queue>#include <vector>
struct MyStruct { int value; // 自定义比较函数 bool operator<(const MyStruct& other) const { // 这里定义的是最小值优先 return value > other.value; }};
int main() { std::priority_queue<MyStruct> pq;
// 向优先队列中插入元素 pq.push({10}); pq.push({30}); pq.push({20}); pq.push({5});
// 遍历优先队列 while (!pq.empty()) { std::cout << pq.top().value << " "; pq.pop(); } std::cout << std::endl;
return 0;}输出结果将是:
5 10 20 30在这个例子中,自定义的比较运算符让我们能够实现最小值优先的排序逻辑。注意,当使用自定义类型时,必须确保提供用于比较元素的机制,要么通过重载operator<,要么通过提供自定义的比较函数对象。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
C++ priority_queue 优先队列
https://blog.81vm3.xyz/posts/cpp-priority-queue/相关文章智能推荐
1
CMake target_include_directories 的三种作用域
编程语言target_include_directories 的 PRIVATE/INTERFACE/PUBLIC 语义、适用场景与对照表。
2
Python StrEnum 与 Literal 的区别
编程语言StrEnum(运行时枚举)与 Literal(纯类型约束)的差异、对比表与 FastAPI/Pydantic 选型建议。
3
Grafana 可视化与监控
云原生与运维Grafana 的定位、常见数据源与 Grafana + Prometheus 经典监控链路。
4
Gin 模型绑定与验证
编程语言Gin 的两类绑定方法(Must/Should)与 binding:'required' 字段校验用法。
5
Go 的 Small Interface 设计理念
编程语言从编译模型看 Go 与 C++ 契约方式的差异:消费者定义小接口与隐式实现的哲学。
随机文章随机推荐











