5

目标:我有一个二维向量。我想按其第 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(),但是在网上搜索之后,老实说,我仍然完全不知道如何去做,所以任何关于代码的直接帮助,甚至是网站或资源的方向,都将不胜感激。谢谢!

4

1 回答 1

15

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。当比较数字类型时,这很好也很容易,因为我们可以只使用<运算符。在您的情况下,如果第 4 个元素小于,则一个“行”是“小于”另一个。

编辑:见这里工作演示。

于 2017-08-03T21:14:21.637 回答