我试图根据函数calculateDistance()返回的值对我的矢量进行排序,该函数返回double值。我猜这个问题是由permutationCopmarator方法引起的。 .cpp文件如下所示:
bool TSPgenetic::permutationComparator(int* i, int* j){
return calculateDistance(i) < calculateDistance(j);
}
void TSPgenetic::chooseNewPopulation(){
sort(population->begin(), population->end(), permutationComparator);
sort(children->begin(), children->end(), permutationComparator);
`....`
}
标头文件片段:
bool permutationComparator(int*, int*);
答案 0 :(得分:0)
传递permutationComparator
作为std::sort
的第三个参数无效。只有static
个类成员才是有效的和functor对象。要解决此问题,请选择以下四个方法:
使用lambda expression创建一个闭包对象并在那里进行比较。
std::sort(population->begin(), population->end(), [](const int *i1, const int *i2){return calculateDistance(i1) < calculateDistance(i2);});
如果您的比较函数不需要static
,则可以使用std::bind
。
auto comp_func = std::bind(&TSPgenetic::permutationComparator, this, std::placeholders::_1, std::placeholders::_2);
std::sort(population->begin(), population->end(), comp_func);
如果可能,请制作比较函数static
。
在您的课程中重载bool operator () ( const int *i1, const int *i2 )
,以使您的班级成为functor object。
请注意,逻辑上比较函数不应该是成员函数。它是一个函数,它接受两个对象并确定它们的顺序。因此,几乎在所有情况下,只有第三个选项适用。