【发布时间】:2014-07-23 14:45:07
【问题描述】:
我有课
class Point
{
private:
int x; int y;
public:
Point(int a, int b):x(a),y(b){}
Point():Point(0,0){}
}
如果我想对Points 的向量进行排序,我应该使用 lambda:
std::sort(xSortedPoints.begin(), xSortedPoints.end(),
[](const cv::Point& p1In, const cv::Point& p2In) -> bool {
return (p1In.x < p2In.x);
});
或在类中使用静态函数:
std::sort(xSortedPoints.begin(), xSortedPoints.end(), xSorting);
xSorting 在Point 类中定义和声明为
static bool xSorting(const Point& p1In, const Point& p2In)
{
return (p1In.x < p2In.x);
}
我为什么要使用 lambda,或者为什么不使用?
编辑:
因为我需要以两种方式排序(x 和 y),所以我没有定义 < 运算符。
根据 cmets 和答案,我需要说我在一个连续运行的应用程序中使用它,因此排序进行了很多次。那么在我的情况下使用什么更好:静态或 lambdas?每次使用 std::sort 时都会创建 Lambda?如果是,那么我认为静态是最好的选择......不是吗?
【问题讨论】:
-
还有第三种选择,您可以为您的班级定义一个
<运算符。那么你根本不需要将第三个参数传递给std::sort。 -
@JoachimPileborg 尽管它可能对特定的排序函数有意义,但重载的比较运算符在全局上下文中并不总是有意义。 Lambda 可以很好地保持单个函数本地化到其各自的职责。这是一个非常自以为是的问题;所有 3 个都是有效的样式偏好。
-
我已经编辑了更多信息......但似乎我将在我的情况下使用静态的