📅  最后修改于: 2023-12-03 14:59:48.625000             🧑  作者: Mango
优先级队列是一个数据结构,可以用来维护一组元素,并且可以保证在任何时刻,能够访问当前具有最高优先级的元素(根据特定的比较标准)。
在C++中,集合的优先级队列被实现成一个STL容器,称为priority_queue
。priority_queue
可以用来处理大量数据的优先排序,比如任务调度、数据压缩、路径规划等等。
priority_queue
的定义如下:
template<
class T,
class Container = vector<T>,
class Compare = less<typename Container::value_type>
> class priority_queue;
其中,T
是队列中存储的元素类型。默认情况下,队列中的元素按照从大到小的顺序排列,但是您可以通过指定比较函数 Compare
来修改排序规则。
Container
是用于存储队列元素的容器,默认情况下使用 vector
作为底层容器,但是您可以使用其他容器,如 deque
或 list
。
下面是一些常用操作:
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()
方法分别访问和弹出了最小值。