例如,如果我有一个类Cell
,我想根据以下函数对其进行排序(x
和y
这里是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);
这是多个(甚至单数)自定义排序函数的最佳实践,并且头文件是适合它们的地方吗?如果没有,那是什么?
答案 0 :(得分:1)
按照您描述的方式进行操作是合理的。如果你关心性能(而不是在.cpp文件中定义它),那么在头文件中定义比较函数inline
是个好主意。
就我个人而言,我的偏好与您不同。我会在命名空间范围(即在类的正下方)声明这个合理的默认比较函数,因为在编写时它不需要对类成员的特权访问。我会将其声明为operator <
。我不认为在制作一个功能方面有什么值得羞耻的特别的&#34;当它似乎是一个合理的默认排序。