std::priority_queue

159 阅读1分钟

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() 函数依次弹出队列中的元素,以获取按优先级排序的元素序列。