跳转至

Priority queue

优先队列(Priority Queue)是计算机科学中的一类抽象数据类型。优先队列中的每个元素都有各自的优先级,优先级最高的元素最先得到服务;优先级相同的元素按照其在优先队列中的顺序得到服务。优先队列通常使用(Heap)实现。

优先队列的简单使用

使用 priority_queue 需要包含头文件 #include <queue>

// 默认参数
priority_queue<TYPE> pq1;
// 默认使用 vector 作为容器
priority_queue<TYPE, vector<TYPE>> pq2;
// 默认使用 less 比较函数,堆顶元素最大 [大顶堆]
priority_queue<TYPE, vector<TYPE>, less<TYPE>> pq3;
print_pq(pq3); // 3 2 1
// greater 比较函数,堆顶元素最小 [小顶堆]
priority_queue<TYPE, vector<TYPE>, greater<TYPE>> pq4;
print_pq(pq4); // 1 2 3

自定义比较函数

auto compare = [](auto& a, auto& b) { return a.second < b.second; };
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(compare)> pq(compare);

priority_queue<pair<int, int>, vector<pair<int, int>>, auto(*)(pair<int, int>,pair<int, int>)->bool> pq([](pair<int, int> a, pair<int, int> b) {
    return a.second < b.second;
});

优先队列 - 维基百科,自由的百科全书 (wikipedia.org)