C++ 将用于(例如)std::sort的比较函数放在何处?

C++ 将用于(例如)std::sort的比较函数放在何处?,c++,sorting,static,std,function-parameter,C++,Sorting,Static,Std,Function Parameter,例如,如果我有一个类单元格,我想根据以下函数对其进行排序(x和y这里是int带访问器的成员变量): 这是多个(甚至单个)自定义排序函数的最佳实践吗?头文件是它们的正确位置吗?如果没有,那是什么?按照您描述的方式进行操作是合理的。如果您关心性能(而不是在.cpp文件中定义),那么在头文件本身中定义比较函数inline是一个好主意 就我个人而言,我的偏好与你不同。我将在名称空间范围(即类的正下方)声明这个合理的默认比较函数,因为它不需要对类成员进行特权访问。我将声明为操作符注释:您应该使用 STD:

例如,如果我有一个类
单元格
,我想根据以下函数对其进行排序(
x
y
这里是
int
带访问器的成员变量):


这是多个(甚至单个)自定义排序函数的最佳实践吗?头文件是它们的正确位置吗?如果没有,那是什么?

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


就我个人而言,我的偏好与你不同。我将在名称空间范围(即类的正下方)声明这个合理的默认比较函数,因为它不需要对类成员进行特权访问。我将声明为<代码>操作符注释:您应该使用<代码> STD::Tys。@克里斯,谢谢,我对C++仍然是新的,不知道存在。实际上,通过成员函数访问值,而不是具有实际变量,<代码> STD::ToeNord.asytuple < /C>可能更好地工作。当然,如果它们是类似于
int
make\u tuple
的东西,可能也会起到同样的作用。@chris我可以使用这两种方法中的任何一种,事实上,由于我将它从一个文件移到另一个文件,同时试图决定将它放在哪里最好,所以访问器仍然使用这种方法。如果结果表明最好的位置是在
Cell.h/Cell.cpp
中,那么我可以使用实际变量。感谢您的建议,我想我现在应该选择命名空间范围的
内联静态
。我会把这个问题留一段时间,看看是否还有其他人可以插手——否则我会把你标记为接受的答案。不客气。在名称空间范围中,您只需要在定义(而不是decl.)处说
inline
,根本不需要
static
bool sortByCoordinates(const Cell& c1, const Cell& c2) {
    return c1.getX() < c2.getX() || (c1.getX() == c2.getX() && c1.getY() < c2.getY());
}
std::sort(cells.begin(), cells.end(), Cell::sortByCoordinates);