c++ - 按最后一个元素对 vector 排序

标签 c++ vector sorting

有一个“vector 的 vector ” 看起来像这样

3 1 2 0 77
0 3 1 2 44
1 0 3 2 29
3 0 1 2 49

我想根据每一行的最后一个元素对它们进行排序,以便最后看起来像这样

1 0 3 2 29 
0 3 1 2 44
3 0 1 2 49
3 1 2 0 77

当然,我的真实示例要复杂得多...但这基本上是我需要完成的。 现在我使用这个片段,它似乎是根据第一个元素排序的。

vector<vector<int>>population;
partial_sort( population.begin(),population.begin()+10, population.end() );

最佳答案

您可以使用 std::sort具有为 vector 提供严格弱排序的函数(或仿函数对象)。 IE。你定义了一个 vector-less-than 函数来正确地排序两个 vector ,就像这样(在我的脑海中)。 编辑:在评论之后,添加了对一两个空 vector 的检查,这确实让事情变得更棘手。

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

关于c++ - 按最后一个元素对 vector 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1437816/

相关文章:

R:如何对命名向量中的元素窗口进行切片

c++ - 如何将一串整数转换为一个充满整数的 vector ?

MongoDB 聚合以及使用关联集合字段进行查找和排序会减慢查询速度

c++ - Mongodb C++ 驱动程序 - 链接错误:使用已弃用的 boost::stystem::get_generic_category()

c++ - 没有锁的独立物理线程

c++ - 以下代码是否调用未定义行为?

java - 数组列表中的排序

c++ - 在 C++ 中实现基于模板的可选类成员的最有效方法?

c++ - 为什么存储此 vector 会出现段错误?

c++ - 如何在插入排序中使用 replace() 使语句变得不必要