2017-08-03 57 views
0

的目的:我有一个2D矢量。我想按照第4列中的值对它进行排序。 例如,我想排序该矢量:C++如何排序一个2D矢量的行,按每行的值列

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

我假设我将不得不排序()使用,但摸索后,在网上我还是老老实实完全不知道如何去这个,所以任何对代码的直接帮助,甚至对网站或资源的指导都会非常感激。 谢谢!

回答

6

使用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。在比较数字类型时,这很好,很容易,因为我们可以使用<运算符。在你的情况下,如果第四个元素小于一个,那么一个“行”是“小于”另一个。编号:here工作演示。

+0

谢谢你的男人! – jdough