配对优先级队列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配对优先级队列相关的知识,希望对你有一定的参考价值。

我正在尝试将对存储在优先级队列中,并且我使用比较函数来比较每对的第二个值。

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

class CompareDist
{
public:
    bool operator()(pair<int,int> n1,pair<int,int> n2) {
        return n1.second>n2.second;
    }
};
int main()
{
    priority_queue<pair<int,int>,CompareDist> pq;
}

当我编译这个时,我得到一个错误

error: no type named ‘value_type’ in ‘class CompareDist’

可能是什么原因。我是STL的新手。

答案

这就是priority_queue的样子:

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

换句话说,CompareDist应该是第三个参数,第二个参数应该是容器(具有value_type),如下所示:

priority_queue<pair<int,int>,vector<pair<int,int>>,CompareDist> pq;

另请注意,priority_queue是所谓的“容器适配器”。另一个容器用作底层容器,priority_queue具有用于访问它的特殊成员函数。容器适配器的另一个例子是std :: stack。

另一答案
priority_queue<pair<int,int>,vector<pair<int,int>>,CompareDist> pq;

你需要为内置的priority_queue模板提供第二个参数。

以上是关于配对优先级队列的主要内容,如果未能解决你的问题,请参考以下文章

# Java 常用代码片段

栈和队列-

配对堆优化Dijkstra算法小记

HTML html的Textmate片段 - 配对输入和标签

BZOJ 1150 1150: [CTSC2007]数据备份Backup (贪心+优先队列)

第03次作业-栈和队列