c ++如何按每行列中的值对2d Vector的行进行排序

jdo*_*ugh 0 c++ sorting vector 2d-vector

目标:我有一个2d矢量.我想按照第4栏中的值对其进行排序.例如,我想对此向量进行排序:

vector<vector<double>> vector1 = {{4,3,5,3}, 
                                  {2,6,3,7}, 
                                  {6,8,5,1}, 
                                  {5,6,1,5}};
Run Code Online (Sandbox Code Playgroud)

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

 vector1 = {{6,8,5,1},
            {4,3,5,3},
            {5,6,1,5},
            {2,6,3,7}};
Run Code Online (Sandbox Code Playgroud)

我假设我将不得不使用sort(),但在网上搜索后,我仍然完全不知道如何去做,所以任何直接帮助代码甚至指向网站或资源的方式都将非常感激.谢谢!

hne*_*atl 6

使用std::sort带有自定义谓词,例如:

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

(当然,有适当的错误检查).

这将相对于给定谓词对"外部向量"的每个项目(每个项目是对应于一行的1D向量)进行排序,给定谓词按第4个元素("行"中的第4列)对它们进行排序.

正如文档中所详述的那样,谓词应该采用两个项目,如果第一个"严格地"小于另一个,则返回true,否则返回false.比较数字类型时,这很简单,因为我们可以使用<运算符.在你的情况下,如果第四个元素小于,则一个"行"小于"另一个".

编辑:请参阅此处了解工作演示.