在 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++ 中表达此逻辑?
在我看来,您也希望对(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 - 我只是基于方法名称,所以这可能不是你真正想要的。