priority_queue c++ 大顶堆
时间: 2024-12-15 09:07:07 浏览: 33
在C++中,priority_queue
是一种容器适配器,默认情况下实现的是一个最大堆(max heap),即优先级最高的元素总是位于堆顶。priority_queue
通常基于 vector
实现,并使用一个堆算法来处理元素。
主要特点
- 默认大顶堆:默认情况下,
priority_queue
是一个大顶堆,堆顶元素是最大的。 - 不支持随机访问:只能访问堆顶元素,无法直接访问其他元素。
- 基本操作:主要操作包括
push
(插入元素)、pop
(删除堆顶元素)和top
(访问堆顶元素)。
基本用法
#include <iostream>
#include <queue>
int main() {
// 创建一个大顶堆
std::priority_queue<int> pq;
// 插入元素
pq.push(10);
pq.push(30);
pq.push(20);
// 访问堆顶元素
std::cout << "Top element: " << pq.top() << std::endl; // 输出 30
// 删除堆顶元素
pq.pop();
// 再次访问堆顶元素
std::cout << "Top element after pop: " << pq.top() << std::endl; // 输出 20
return 0;
}
自定义比较器
如果需要实现一个小顶堆,可以使用自定义比较器。例如,使用 std::greater
作为比较器:
#include <iostream>
#include <queue>
#include <vector>
int main() {
// 创建一个小顶堆
std::priority_queue<int, std::vector<int>, std::greater<int>> pq;
// 插入元素
pq.push(10);
pq.push(30);
pq.push(20);
// 访问堆顶元素
std::cout << "Top element: " << pq.top() << std::endl; // 输出 10
// 删除堆顶元素
pq.pop();
// 再次访问堆顶元素
std::cout << "Top element after pop: " << pq.top() << std::endl; // 输出 20
return 0;
}
常见操作
push(x)
: 插入元素x
pop()
: 删除堆顶元素top()
: 访问堆顶元素empty()
: 检查堆是否为空size()
: 返回堆中元素的数量
通过这些操作,可以方便地使用 priority_queue
来实现各种优先队列的功能。
相关推荐


















