【问题标题】:How can I sort elements of a vector by row using std::sort如何使用 std::sort 按行对向量的元素进行排序
【发布时间】:2016-10-24 09:09:38
【问题描述】:

我想逐行对向量的元素进行排序,每行的大小不同,例如,如果我有一个

vector v = { 
             {5, 3, 1, 2},
             {10, 1},
             {3, 2, 1},
             {4, 3, 2, 0}
}


final vector = { {1, 2, 3, 5},
                 {1, 10},
                 {1, 2, 3},
                 {0, 2, 3, 4}
}

如何使用 std::sort 函数做到这一点?

这是我迄今为止尝试过的。

vector< vector<int> > v;
for(int i = 0; i < n; i++){
    sort(&v[i][i], &v[i][i] + n*m, less<int>());
}

【问题讨论】:

  • 行是什么意思?是向量的向量吗?
  • 是的,它是向量的向量。
  • 到目前为止你尝试了什么?
  • 由于每一行的大小不同,所以可以使用vector>,对内层向量进行循环排序
  • @RahulNarayanan 也将代码放入问题中,以便人们可以轻松查看所有内容

标签: c++ c++14


【解决方案1】:

您应该使用std::vector&lt;std::vector&lt;int&gt;&gt; 来保存您的数据。让我们假设已经进行了此更改。

您的最终目标是对外部向量中的每个向量进行排序。使用std::sort 非常简单。

如果您想就地执行此操作,只需在 for 循环中对向量中的每个向量调用 sort。

std::vector<std::vector<int>> vs = { 
    {5, 3, 1, 2},
    {10, 1},
    {3, 2, 1},
    {4, 3, 2, 0}
};

for(auto& v: vs) {
    std::sort(v.begin(), v.end());
}

Ideone it.

类似地,但可读性差得多,是使用std::for_eachstd::sort 应用于外部向量中的每个元素。

ideone 已包含在此方法中,但我会提醒您使用上面不那么冗长且更易读的版本。

【讨论】:

    【解决方案2】:

    试试这个:

    for ( auto& items:v)
     std::sort(items.begin(),items.end(),[](int lhs,int rhs) { return lhs<rhs; } );
    

    【讨论】:

    • 您可以删除 lambda:std::sort 默认使用 operator &lt;
    • @Quentin:同意,sn-p 只是为了清楚起见,或者也可以进行降序排序
    • @seccpur 表示降序,std::greater 会比 lambda 更简洁。
    • 方括号指的是什么?
    • @RahulNarayanan 这叫做lambda function
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 2016-09-11
    • 2019-11-04
    相关资源
    最近更新 更多