std::priority_queue 是 C++ 标准库中的一个容器适配器,用于实现优先队列数据结构。优先队列是一种特殊的队列,它的每个元素都有一个关联的优先级,根据优先级高低来确定元素的顺序。
std::priority_queue 在内部使用堆来实现,通常是最大堆(大顶堆),但也可以通过自定义比较器来实现最小堆(小顶堆)。
以下是 std::priority_queue 的常用 API:
push(const T& value):将元素value插入优先队列。pop():弹出优先队列中的顶部元素(即优先级最高的元素)。top():返回优先队列中的顶部元素的引用,即优先级最高的元素。size():返回优先队列中的元素数量。empty():检查优先队列是否为空。
除此之外,std::priority_queue 还提供了一个构造函数,可以指定容器类型和比较器类型。默认情况下,使用 std::vector 作为底层容器,并使用 operator< 来比较元素的优先级。
以下是一个示例,演示了如何使用 std::priority_queue:
#include <iostream>
#include <queue>
int main() {
// 创建一个优先队列(最大堆)
std::priority_queue<int> maxHeap;
// 插入元素
maxHeap.push(3);
maxHeap.push(1);
maxHeap.push(4);
maxHeap.push(1);
maxHeap.push(5);
// 弹出元素
while (!maxHeap.empty()) {
std::cout << maxHeap.top() << " ";
maxHeap.pop();
}
std::cout << std::endl;
return 0;
}
在这个示例中,我们创建了一个最大堆优先队列 maxHeap,并向其中插入了一些元素。然后,使用 top() 和 pop() 函数依次弹出队列中的元素,以获取按优先级排序的元素序列。