如何使用std :: sort按行对元素的元素进行排序

时间:2016-10-24 09:09:38

标签: c++ c++14

我想按行对元素进行排序,每行的大小不同,例如,如果我有

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

2 个答案:

答案 0 :(得分:1)

您应该使用std::vector<std::vector<int>>来保存数据。让我们假设已经做出了这一改变。

您的最终目标是对外部矢量中的每个矢量进行排序。使用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,但我要小心使用上面那些不那么详细且更易阅读的版本。

答案 1 :(得分:0)

试试这个:

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