排序,然后在 C++ 中使用 lambda 函数

Joh*_*Tan 1 c++ lambda

在 C# 中给出一个结构:

struct Point {int x, int y}
Run Code Online (Sandbox Code Playgroud)

我们可以这样写:

List<Point> list;
list.OrderBy(p => p.x).ThenBy(q => q.y);
Run Code Online (Sandbox Code Playgroud)

如何使用 lambda 函数在 C++ 中表达此逻辑?

Sto*_*ica 5

在我看来,您也希望对(y, x)1进行字典排序。您可以利用库函数std::tie。那个返回一个引用元组,并且 astd::tuple有一个小于运算符来执行字典比较。因此,您只需指定要比较项目的顺序。

这是它的查找方式std::vector(您在 C++ 中转到容器类型,始终以 开头std::vector):

std::vector<Point> my_list;
// Fill my_list
std::sort(begin(my_list), end(my_list), [](auto const& l, auto const& r){
  return std::tie(l.y, l.x) < std::tie(r.y, r.x);
});
Run Code Online (Sandbox Code Playgroud)

1 - 我只是基于方法名称,所以这可能不是你真正想要的。