按最后元素对矢量排序

0 c++ sorting vector

有一个看起来像这样的"矢量矢量"

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)

Jor*_*ans 7

您可以将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)


rpg*_*rpg 6

使用一个简单的std :: sort并传递一个仅比较向量的最后元素的仿函数.

Partial_sort重新排列[first,last]范围内的元素,使它们部分按升序排列.具体来说,它将最小的中间 - 第一个元素按升序排列到[first,middle]范围内.剩余的最后 - 中间元素以未指定的顺序放置在[中间,最后]范围内.