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