📜  C++ 中集合的优先级队列及示例(1)

📅  最后修改于: 2023-12-03 14:59:48.625000             🧑  作者: Mango

C++ 中集合的优先级队列及示例

介绍

优先级队列是一个数据结构,可以用来维护一组元素,并且可以保证在任何时刻,能够访问当前具有最高优先级的元素(根据特定的比较标准)。

在C++中,集合的优先级队列被实现成一个STL容器,称为priority_queuepriority_queue可以用来处理大量数据的优先排序,比如任务调度、数据压缩、路径规划等等。

语法

priority_queue 的定义如下:

template<
    class T,
    class Container = vector<T>,
    class Compare = less<typename Container::value_type>
> class priority_queue;

其中,T 是队列中存储的元素类型。默认情况下,队列中的元素按照从大到小的顺序排列,但是您可以通过指定比较函数 Compare 来修改排序规则。

Container 是用于存储队列元素的容器,默认情况下使用 vector 作为底层容器,但是您可以使用其他容器,如 dequelist

下面是一些常用操作:

  • push(x):将元素 x 插入队列中
  • pop():弹出队列顶部元素
  • top():获取队列顶部元素的值
  • empty():判断队列是否为空
  • size():获取队列中元素的个数
示例

下面是一个例子,使用 priority_queue 实现了一个简单的最小堆。

#include <iostream>
#include <queue>

using namespace std;

int main()
{
    priority_queue<int, vector<int>, greater<int>> minHeap;

    minHeap.push(3);
    minHeap.push(1);
    minHeap.push(4);

    while (!minHeap.empty()) {
        cout << minHeap.top() << " ";
        minHeap.pop();
    }

    return 0;
}

在上面的例子中,使用了 greater<int> 指定了比较函数,使用 vector<int> 作为底层容器,然后插入 3、1、4 三个元素到堆中。最后,通过 top()pop() 方法分别访问和弹出了最小值。