【问题标题】:Pair inside priority queue在优先级队列中配对
【发布时间】:2012-09-23 00:58:42
【问题描述】:

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

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

【问题讨论】:

    标签: c++ stl priority-queue std-pair


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
      priority_queue<pair<int,int>,vector<pair<int,int>>,CompareDist> pq;
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-20
        • 1970-01-01
        • 1970-01-01
        • 2013-02-13
        • 1970-01-01
        • 1970-01-01
        • 2011-03-20
        相关资源
        最近更新 更多