Len*_*art 11 c++ sorting reference non-static
std::sort在类中定义时,我无法将该函数与我的自定义比较函数一起使用。
class Test {
private:
vector< vector<int> > mat;
bool compare(vector<int>, vector<int>);
public:
void sortMatrix();
}
bool Test::compare( vector<int> a, vector<int> b) {
return (a.back() < b.back());
}
void Test::sortMatrix() {
sort(vec.begin(), vec.end(), compare);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
error: reference to non-static member function must be called
sort(vec.begin(), vec.end(), compare);
^~~~~~~
Run Code Online (Sandbox Code Playgroud)
然而compare(),当我sortMatrix()在没有任何类的文件 main.cpp 中定义和时,一切正常。我将不胜感激任何帮助和建议。
arp*_*714 19
Make your comparator function static. It will work.
Run Code Online (Sandbox Code Playgroud)
小智 6
有三种方法可以做到这一点:
创建一个结构体,并为该结构体定义了operator()
结构比较函数 {
inline bool operator() (const vector<int> &a, const vector<int> &b)
{
return (a.back() < b.back());
}
Run Code Online (Sandbox Code Playgroud)
};
并按以下方式调用排序函数:
std::sort(vect.begin(),vect.end(),compareFunc());
如果您使用的是 C++11 版本,则编写 lamda 函数并调用类中定义的比较器函数:
std::sort(vec.begin(), vec.end(), [this](vector<int> a, vector<int> b){
return (compareFun(a,b));
Run Code Online (Sandbox Code Playgroud)
});
按照下面提到的方式在您的类中定义compareFun:
类测试 { public: boolcompareFun(向量 a, 向量 b) { return (a.back() < b.back()); } } };
正如我们的一位朋友提到的,使用静态方法。我希望这能起作用。
调用compare你需要一个Field对象。如果您有 C++11 支持,您可以使用 lambda 从那里调用它:
sort(vec.begin(), vec.end(), [this] (vector<int> a, vector<int> b) {
return compare(a, b); });
Run Code Online (Sandbox Code Playgroud)
或者只是将您的比较方法移出类,无论如何您都不需要访问它的成员。