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
指针和两个 int
s.
此外,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);
}
我有这样的代码
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
指针和两个 int
s.
此外,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);
}