优先队列内的配对

32

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

#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很新。

2个回答

55

这就是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。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接