在哪里放置比较函数(例如)std :: sort?

时间:2014-03-15 00:35:28

标签: c++ sorting static std function-parameter

例如,如果我有一个类Cell,我想根据以下函数对其进行排序(xy这里是int成员变量和访问者):

bool sortByCoordinates(const Cell& c1, const Cell& c2) {
    return c1.getX() < c2.getX() || (c1.getX() == c2.getX() && c1.getY() < c2.getY());
}

在哪里放置此功能的最佳位置,以便我可以使用std::sort等功能?

在示例中,他们只是将方法浮动在上面的源文件中所需的位置,但实际上我希望将其与Cell类相关联。我知道我可以覆盖operator<,但可能有其他排序方法,我希望对Cell进行排序,而且我不是代表操作符重写操作符的忠实粉丝无论如何,清晰度。

目前我在static文件中将其作为Cell.h方法,以便我可以在排序时调用它:

std::sort(cells.begin(), cells.end(), Cell::sortByCoordinates);

这是多个(甚至单数)自定义排序函数的最佳实践,并且头文件是适合它们的地方吗?如果没有,那是什么?

1 个答案:

答案 0 :(得分:1)

按照您描述的方式进行操作是合理的。如果你关心性能(而不是在.cpp文件中定义它),那么在头文件中定义比较函数inline是个好主意。

就我个人而言,我的偏好与您不同。我会在命名空间范围(即在类的正下方)声明这个合理的默认比较函数,因为在编写时它不需要对类成员的特权访问。我会将其声明为operator <。我不认为在制作一个功能方面有什么值得羞耻的特别的&#34;当它似乎是一个合理的默认排序。