优先队列是一种特殊的队列,其中的元素被赋予优先级,在出队时,优先级最高的元素最先被移除。在 C++ 中,优先队列通过标准模板库(STL)中的 priority_queue
类模板实现。这里是如何使用优先队列的基本示例:
引入头文件
首先,需要包含优先队列的头文件。
#include <iostream>
#include <queue> // 包含优先队列的头文件
声明优先队列
可以像声明其他容器一样声明一个优先队列。如果不指定比较方式,默认是使用 std::less
,这意味着最大元素会先出队。
std::priority_queue<int> pq; // 默认是最大堆,最大的元素总是先出队
如果你想要最小元素优先出队,可以这样声明:
std::priority_queue<int, std::vector<int>, std::greater<int>> minPq; // 最小堆
添加元素
使用 push()
方法向优先队列中添加元素。
pq.push(30);
pq.push(10);
pq.push(20);
pq.push(50);
访问顶部元素
使用 top()
方法可以查看优先队列中的顶部元素(优先级最高的元素)。
std::cout << "Top element: " << pq.top() << std::endl; // 输出: Top element: 50
移除元素
使用 pop()
方法可以移除优先队列中的顶部元素。
pq.pop(); // 移除了50
std::cout << "Top element after pop: " << pq.top() << std::endl; // 输出: Top element after pop: 30
检查优先队列的大小
使用 size()
方法可以获取优先队列中的元素数量。
std::cout << "Priority queue size: " << pq.size() << std::endl;
检查优先队列是否为空
使用 empty()
方法可以检查优先队列是否为空。
if (pq.empty()) {
std::cout << "Priority queue is empty" << std::endl;
} else {
std::cout << "Priority queue is not empty" << std::endl;
}
这些是优先队列的基本操作。优先队列通常用于需要快速访问最大或最小元素的场景,如任务调度、带权调度、Dijkstra 算法等。