gpt4 book ai didi

c++ - priority_queue 与自定义比较器作为类方法

转载 作者:行者123 更新时间:2023-11-28 06:13:11 27 4
gpt4 key购买 nike

我有这样的代码

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

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

最佳答案

bool CompareByDistance(int indexLeft, int indexRight);

采用三个参数:this 指针和两个 int

此外,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);
}

关于c++ - priority_queue 与自定义比较器作为类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30846330/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com