📜  结构或类的STL优先级队列(1)

📅  最后修改于: 2023-12-03 15:27:33.986000             🧑  作者: Mango

STL优先级队列

STL优先级队列是C++中的一种数据结构,它为元素设置了优先级,元素的优先级越高,越先被处理。优先级队列底层实现是基于堆排序(Heap)的,即一个完全二叉树,满足一个性质:父节点的元素优先级高于子节点的元素优先级。

STL优先级队列包含在头文件<queue>中,它的模板定义如下:

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

其中T表示元素的类型,Container表示底层容器类型,默认使用vector<T>Compare为比较函数类型,用于确定元素优先级,默认使用less<T>

例子

下面来看一个例子,用STL优先级队列实现一个小根堆,即优先级最低的元素被先处理:

#include <iostream>
#include <queue>
using namespace std;

int main() {
    priority_queue<int, vector<int>, greater<int> > pq; // 小根堆
    pq.push(3);
    pq.push(2);
    pq.push(4);
    pq.push(1);

    while (!pq.empty()) {
        cout << pq.top() << " ";
        pq.pop();
    }
    // 输出: 1 2 3 4
    return 0;
}

以上代码中,"priority_queue<int, vector<int>, greater<int> > pq"表示定义一个类型为int的小根堆。

常用方法

STL优先级队列常用方法如下:

  • push(x): 将x插入优先级队列
  • pop(): 删除优先级最高的元素
  • top(): 返回优先级最高的元素
  • size(): 返回优先级队列中元素的个数
  • empty(): 判断优先级队列是否为空
总结

通过使用STL优先级队列,我们可以轻松地实现一个小根堆或大根堆,并使用其提供的操作进行元素的插入、删除和查询。这大大简化了程序的开发过程,提高了程序的可读性和可维护性。