在C++标准模板库(STL)中,priority_queue 是一个非常实用的容器适配器,它实现了优先队列(Priority Queue)这一抽象数据类型。本文将带你从零开始,深入浅出地掌握 C++ priority_queue 的基本概念、常用操作和实际应用场景。
优先队列是一种特殊的队列,其中每个元素都有一个“优先级”。与普通队列(先进先出)不同,优先队列总是先弹出优先级最高的元素。在C++中,priority_queue 默认实现为一个最大堆(max-heap),即队首元素是最大的。
使用 priority_queue 需要包含 <queue> 头文件:
#include <iostream>#include <queue> // 包含 priority_queue 所需头文件using namespace std; 默认情况下,priority_queue 是一个最大堆:
// 声明一个存储 int 类型的最大堆priority_queue<int> pq; 你也可以显式指定底层容器和比较函数:
// 使用 vector 作为底层容器,less<int> 表示最大堆priority_queue<int, vector<int>, less<int>> max_pq;// 使用 greater<int> 实现最小堆priority_queue<int, vector<int>, greater<int>> min_pq; push(x):插入元素 xpop():移除堆顶元素(不返回值)top():返回堆顶元素(不移除)empty():判断是否为空size():返回元素个数下面是一个完整的 C++ priority_queue 示例,演示了最大堆和最小堆的使用:
#include <iostream>#include <queue>#include <vector>using namespace std;int main() { // 最大堆(默认) priority_queue<int> maxHeap; maxHeap.push(10); maxHeap.push(30); maxHeap.push(20); cout << "最大堆顶部元素: " << maxHeap.top() << endl; // 输出 30 maxHeap.pop(); cout << "弹出后顶部元素: " << maxHeap.top() << endl; // 输出 20 // 最小堆 priority_queue<int, vector<int>, greater<int>> minHeap; minHeap.push(10); minHeap.push(30); minHeap.push(20); cout << "最小堆顶部元素: " << minHeap.top() << endl; // 输出 10 return 0;} 当处理自定义结构体或类时,你需要提供比较规则。例如,按学生分数从高到低排序:
struct Student { string name; int score;};// 自定义比较函数(仿函数)struct CompareStudent { bool operator()(const Student& a, const Student& b) { return a.score < b.score; // 最大堆:分数高的优先 }};// 使用方式priority_queue<Student, vector<Student>, CompareStudent> pq; C++ priority_queue 在算法和工程中用途广泛,例如:
通过本教程,你应该已经掌握了 C++ priority_queue 的基本用法。记住:
greater<T> 可变为最小堆top() 和 pop() 访问希望这篇 C++优先队列教程 能帮助你轻松上手 STL 中的 priority_queue!无论是面试还是实际开发,掌握 STL priority_queue用法 都将大大提升你的编程效率。
关键词回顾:C++ priority_queue、C++优先队列教程、STL priority_queue用法、C++堆数据结构。
本文由主机测评网于2025-12-18发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025129499.html