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

d

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

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(),但是在网上搜索之后,老实说,我仍然完全不知道如何解决这个问题,因此,对代码的直接帮助,甚至对网站或资源的指导,都将不胜感激。谢谢!

亨法特

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

编辑:请参见此处以获取工作演示。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章