📅  最后修改于: 2023-12-03 15:29:54.228000             🧑  作者: Mango
在C++中,优先级队列(priority queue)是一种可动态增删元素,依据特定优先级弹出元素的容器。优先级队列模板类位于头文件 <queue>
中,通常基于堆(heap)数据结构实现。
堆是一种基于完全二叉树的数据结构,每个节点都与其子节点的大小关系是固定的,通常分为两种类型:
对于优先级队列而言,通常使用最大堆实现,因为堆顶元素是最大元素,便于处理优先级。
优先级队列模板类可以定义为下方的样式:
template<class T, class Container = vector<T>,
class Compare = less<typename Container::value_type>>
class priority_queue;
其中:
优先级队列支持以下操作:
下面是一个简单的使用优先级队列实现堆排序的例子:
#include <iostream>
#include <queue>
using namespace std;
void heap_sort(vector<int>& v) {
priority_queue<int, vector<int>, less<int>> pq;
for (auto x : v) {
pq.push(x);
}
for (int i = v.size() - 1; i >= 0; --i) {
v[i] = pq.top();
pq.pop();
}
}
int main() {
vector<int> v = {4, 1, 3, 2, 7, 6};
heap_sort(v);
for (auto x : v) {
cout << x << ' ';
}
cout << '\n';
return 0;
}
在上方代码中,使用优先级队列将vector容器中元素排序,依据降序依次读取最大值并放在vector容器内。优先级队列的默认排序方法是less