【问题标题】:c++ How to sort the rows of a 2d Vector, by the values in each rows columnc ++如何按每行列中的值对二维向量的行进行排序
【发布时间】:2018-01-11 16:05:00
【问题描述】:

目标:我有一个二维向量。我想按其第 4 列中的值对其进行排序。 例如我想对这个向量进行排序:

vector<vector<double>> vector1 = {{4,3,5,3}, 
                                  {2,6,3,7}, 
                                  {6,8,5,1}, 
                                  {5,6,1,5}};

我想按第 4 列中的值对其行进行排序,以便其元素在行中的位置不变,但向量中的行位置发生更改,以便第 4 列中的元素按以下顺序排列:

 vector1 = {{6,8,5,1},
            {4,3,5,3},
            {5,6,1,5},
            {2,6,3,7}};

我假设我将不得不使用 sort(),但是在网上搜索之后,老实说,我仍然完全不知道如何去做,所以任何关于代码的直接帮助,甚至是网站或资源的方向都是真的赞赏。 谢谢!

【问题讨论】:

    标签: c++ sorting vector 2d-vector


    【解决方案1】:

    std::sort 与自定义谓词一起使用,例如:

    std::sort(vector1.begin(),
              vector1.end(),
              [] (const std::vector<double> &a, const std::vector<double> &b)
              {
                  return a[3] < b[3];
              });
    

    (当然还有适当的错误检查)。

    这会根据给定谓词对“外部向量”的每个项目(每个项目是对应于一行的一维向量)进行排序,该谓词按它们的第 4 个元素(“行”中的第 4 列)对它们进行排序。

    如文档中所述,谓词应采用两项,如果第一项“严格小于”另一项则返回 true,否则返回 false。当比较数字类型时,这很好也很容易,因为我们可以使用&lt; 运算符。在您的情况下,如果第 4 个元素小于,则一个“行”是“小于”另一个。

    编辑:有关工作演示,请参阅 here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 2023-04-03
      • 2013-04-12
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多