priority_queue 将自定义比较器作为 class 方法

priority_queue with custom comparator as a class method

我有这样的代码

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

其中

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

但我收到错误

error C2064: term does not evaluate to a function taking 2 arguments

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

bool CompareByDistance(int indexLeft, int indexRight);

接受三个参数:this 指针和两个 ints.

此外,priority_queue 模板参数的参数数量错误:您希望调用此非静态方法的 VD 实例是什么?

解决此问题的方法是 "carrying" 你的实例是这样的:

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);
}