0

例如,如果我有一个 class Cell,我想根据以下函数对其进行排序(x这里yint带有访问器的成员变量):

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);

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

4

1 回答 1

1

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

就我个人而言,我的偏好与您不同。我会在命名空间范围内(即在类的正下方)声明这个合理的默认比较函数,因为正如所写的那样,它不需要对类成员的特权访问。我会将其声明为operator <. 当一个功能看起来是合理的默认排序时,我认为没有什么可耻的。

于 2014-03-15T01:10:37.700 回答