我在mergeSort的排序标题中有一个函数
这是我的代码:
模板
void mergeSort(vector<Comparable> & a, vector<Comparable> & tmpArray, int left int right, Comparator cmp)
{
if (cmp(left,right))
{
int center = (left + right) / 2;
mergeSort(a, tmpArray, left, center);
mergeSort(a, tmpArray, center + 1, right);
merge(a, tmpArray, left, center + 1, right);
}
}
我想使用此比较器并在mainDriver.cpp中传递参数
class CompareXCoordinate {
public:
bool operator()(const Point & p1, const Point & p2) const
{
return (p1.getX() < p2.getX());
}
};
目前,我正在像这样传递它:
Points是Point对象的向量 tempArr是一个空向量
mergeSort(points, tempArr, points.begin(), points.end(), Point::CompareXCoordinate::operator())
我收到C3867的错误:非标准语法,使用&创建指向成员的指针
这是传递比较器的正确方法还是另外一种语法?
答案 0 :(得分:1)
operator()
是一个实例方法,因此您需要传递CompareXCoordinate
类的实例作为比较器,而不是operator()
本身:
mergeSort(points, tempArr, points.begin(), points.end(), Point::CompareXCoordinate());
尽管,您的类不会对任何非静态数据成员起作用(如果您希望使用<
或>
是可配置的,那么这很有意义),因此您可以使用独立函数而不是类:
bool CompareXCoordinate(const Point & p1, const Point & p2)
{
return (p1.getX() < p2.getX());
}
mergeSort(points, tempArr, points.begin(), points.end(), Point::CompareXCoordinate);
或者,如果您使用的是C ++ 11或更高版本,则可以改用lambda:
mergeSort(points, tempArr, points.begin(), points.end(),
[](const Point & p1, const Point & p2){
return (p1.getX() < p2.getX());
}
);