priority_queue使用自定义比较器作为类方法

时间:2015-06-15 13:23:04

标签: c++ priority-queue

我有这样的代码

priority_queue<int, std::vector<int>, decltype(&VD::CompareByDistance)> pqDistances(&VD::CompareByDistance);

其中

class VD 
{
    ...
    bool CompareByDistance(int indexLeft, int indexRight) const;
};

但我得到错误

  

错误C2064:术语不评估为采用2个参数的函数

如何将类成员作为编译器传递,问题是我希望比较器访问其实例字段。感谢。

1 个答案:

答案 0 :(得分:1)

bool CompareByDistance(int indexLeft, int indexRight);

有三个参数:this - 指针和两个int s。

除此之外,priority_queue模板参数的参数数量错误:您希望调用这个非静态方法的VD的哪个实例?

对此的解决方法是像这样“携带”实例:

VD v;
auto comp = [&](int i1, int i2) {return v.CompareByDistance(i1, i2);}

comp对象现在将成为队列的有效模板参数。例如:

struct A{
    bool compare (int, int) const {return true;}
};

int main()
{
    A a;
    auto comp = [&](int i, int i2) {return a.compare(i, i2);};
    std::priority_queue<int, std::vector<int>, decltype(comp)> q (comp);
}