C++ Lambda vs排序函数

C++ Lambda vs排序函数,c++,lambda,C++,Lambda,我有一节课 class Point { private: int x; int y; public: Point(int a, int b):x(a),y(b){} Point():Point(0,0){} } 如果我想对点s的向量进行排序,我应该使用lambda: std::sort(xSortedPoints.begin(), xSortedPoints.end(), [](const cv::Point& p1In, const cv::Poin

我有一节课

class Point
{
private:
  int x; int y; 
public:
  Point(int a, int b):x(a),y(b){}
  Point():Point(0,0){}
}
如果我想对
s的向量进行排序,我应该使用lambda:

std::sort(xSortedPoints.begin(), xSortedPoints.end(),
          [](const cv::Point& p1In, const cv::Point& p2In) -> bool {
              return (p1In.x < p2In.x);
          });
其中,
xSorting
类中定义并声明为

static bool xSorting(const Point& p1In, const Point& p2In)
{
  return (p1In.x < p2In.x);
}
静态布尔排序(常数点和p1In、常数点和p2In)
{
返回(p1In.x
为什么我要使用lambda,或者为什么不使用


编辑:


因为我需要以两种方式进行排序(按
x
和按
y
),所以我没有定义
,这是一种基于观点的排序,但简而言之:

如果短且不经常使用,请使用lambda。你的例子很简短。如果函数较长、复杂或经常使用,请为其命名


在这种特殊情况下,您可以考虑重载
操作符lambda,因为它们方便且代码流畅

如果您喜欢使用静态函数,您应该这样做。如果你使用它一次考虑lambda。 据我所知,使用lambdas时没有性能提升


因此,要么执行静态函数,要么为类定义lambda,要么定义小于运算符。

我不知道这里是否存在任何性能问题,您得到的答案将是“IM(H)O…”类型,因此我的两分钱:


在本例中,lambda是好的,因为它通过比较两点向正在阅读代码的人显示了您的意思。从数学上讲,2D(或更高维度)点不会形成有序集,因此
Lambda会使代码更简洁,尤其是在您的例子中,如果它是一个单行程序。另一方面,如果静态函数方法需要或可以在多个地方使用,我会认为它更可取

还有第三种选择,即定义一个
@JoachimPileborg,尽管它对于特定的排序函数可能有意义,但重载的比较运算符在全局上下文中并不总是有意义。lambda很好地将单个函数本地化为其各自的职责。这是一个相当固执己见的问题;所有3个都是有效的样式首选项。我已经编辑了更多信息。。。但看来我应该用静态的
static bool xSorting(const Point& p1In, const Point& p2In)
{
  return (p1In.x < p2In.x);
}