如何对vector <vector <int>&gt;?</vector <int>进行排序

时间:2014-06-17 12:11:15

标签: c++ sorting vector

我有一个矢量:

vector<vector<int>> myvector;

如何按照字母顺序排列字母顺序对此向量进行排序?

e.g。输出:

未排序:

  

5 9 4 12 4

     

7 9 3 4 7 9

     

6 5 11

     

5 8 7 3

     

5 9 5 1 1

排序:

  

7 9 3 4 7 9

     

6 5 11

     

5 9 5 1 1

     

5 9 4 12 4

     

5 8 7 3

1 个答案:

答案 0 :(得分:6)

只需使用std::sort算法即可。唯一的细微之处在于它按降序排序,因此您需要更改排序标准。我想到了两种方法。

使用自定义比较仿函数,例如std::greater

std::sort(v.begin(), v.end(), std::greater<std::vector<int>>());  

使用反向迭代器:

std::sort(myvector.rbegin(), myvector.rend());

前一个版本使意图更清晰,而后者可能需要一些头部刮擦和文档阅读。但两者的结果是一样的。

这是一个有效的例子:

#include <vector>
#include <algorithm>   // for std::sort
#include <functional>  // for std::greater
#include <iostream>

int main()
{    
  // Set up an example vector
  std::vector<std::vector<int>> v{{5, 9, 4, 12, 4},
                                  {7, 9, 3, 4, 7, 9},
                                  {6, 5, 11},
                                  {5, 8, 7, 3},
                                  {5, 9, 5, 1, 1}};

  // Perform the sort
  std::sort(v.begin(), v.end(), std::greater<std::vector<int>>());

  // Output the results
  for (const auto& i : v)
  {
    for (auto j : i)
      std::cout << j << " ";
    std::cout << "\n";
  }
}

输出:

7 9 3 4 7 9
6 5 11
5 9 5 1 1
5 9 4 12 4
5 8 7 3