【问题标题】:c++20 Sorting Vector of structs with structs member variable and std::rangesc++20 使用结构成员变量和 std::ranges 对结构进行排序向量
【发布时间】:2021-02-27 12:13:42
【问题描述】:

我有一个简单的结构

struct MyStruct
{
    int x;
}

我有一个MyStructs 的向量。

vector<MyStruct> myStructs;
int n = 10;

for(auto i = 0; i < n; i++)
    myStructs.push_back(MyStruct{.x = n - i});

我将如何使用std::ranges根据成员变量.xmyStructs进行排序?

【问题讨论】:

  • 这个页面底部有很好的例子,我们如何使用std::ranges

标签: c++ c++20 std-ranges


【解决方案1】:

使用投影:

std::ranges::sort(myStructs, {}, &MyStruct::x); //< sort by x

【讨论】:

  • 你知道为什么我得到`error: 'sort' is not a member of 'std::ranges';你是说'std::sort'吗?`?
  • @InyoungKim김인영 您的编译器可能还不完全支持ranges
  • @InyoungKim김인영 或者你忘了#include &lt;algorithm&gt;
【解决方案2】:

由于您尚未提供成员 operator&lt;(或 operator&lt;=&gt;),您可以使用 lambda 来完成:

#include <algorithm>

std::ranges::sort(myStructs, [](auto& lhs, auto& rhs) { return lhs.x < rhs.x; });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多