有一个看起来像这样的"矢量矢量"
3 1 2 0 77
0 3 1 2 44
1 0 3 2 29
3 0 1 2 49
Run Code Online (Sandbox Code Playgroud)
我想根据每一行中的最后一个元素对它们进行排序,以便它最终看起来像这样
1 0 3 2 29
0 3 1 2 44
3 0 1 2 49
3 1 2 0 77
Run Code Online (Sandbox Code Playgroud)
当然,我的真实例子要复杂得多......但这基本上就是我需要完成的事情.现在我使用这个片段似乎根据第一个元素排序.
vector<vector<int>>population;
partial_sort( population.begin(),population.begin()+10, population.end() );
Run Code Online (Sandbox Code Playgroud)
您可以将std :: sort与函数(或函子对象)一起使用,该函数为向量提供严格的弱排序.也就是说,你定义了一个无向量的函数,它可以正确地排序两个向量,就像这样(在我的脑海中).编辑:在评论之后,添加了对一个或两个空向量的检查,这确实使事情变得棘手.
bool CustomVectorCompare(const std::vector<int> &i_lhs, const std::vector<int> &i_rhs)
{
if(i_rhs.empty())
return false; // If right side is empty, left can only be equal or larger
if(i_lhs.empty())
return true; // Consider an empty vector to be "smaller"
// than any non-empty vector.
return i_lhs.back() < i_rhs.back();
}
std::sort(population.begin(), population.end(), CustomVectorCompare);
Run Code Online (Sandbox Code Playgroud)
使用一个简单的std :: sort并传递一个仅比较向量的最后元素的仿函数.
Partial_sort重新排列[first,last]范围内的元素,使它们部分按升序排列.具体来说,它将最小的中间 - 第一个元素按升序排列到[first,middle]范围内.剩余的最后 - 中间元素以未指定的顺序放置在[中间,最后]范围内.
| 归档时间: |
|
| 查看次数: |
1422 次 |
| 最近记录: |