📅  最后修改于: 2023-12-03 15:27:33.986000             🧑  作者: Mango
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优先级队列,我们可以轻松地实现一个小根堆或大根堆,并使用其提供的操作进行元素的插入、删除和查询。这大大简化了程序的开发过程,提高了程序的可读性和可维护性。