【问题标题】:C++ vector sorting put simplyC++ 向量排序简单地说
【发布时间】:2011-07-12 21:10:39
【问题描述】:

好的,我有一个vector< vector < long >>,我想从最小到最大对最里面的向量进行排序 - 即我希望排序后的 vector < long > 看起来像 3,7,21。

以前有人问过这个问题,但我想非常简单地做到这一点,以便非程序员也能理解。我已经看到我可以创建一个函数或仿函数来排序as in this question. 有没有办法在不创建额外排序函数的情况下做到这一点?我是作为课程的一部分来做这件事的,我希望有一种方法可以做到这一点,而不必让人们在我的代码中寻找简单的排序功能。

一种可能性是在类函数中可能有某种方式来定义排序函数,但这在 C++ 中可能是不允许的。

回到正题:我已经看到了几种方法来做到这一点,我想知道对整数向量进行排序的最简单方法是什么。非常感谢任何帮助,因为这可能会比看起来更有帮助。

【问题讨论】:

    标签: c++ sorting vector


    【解决方案1】:

    std::sort 函数使用std::less<T> 函数进行默认排序。要获得相反的顺序,请明确使用std::greater<T> 函数。

    我只是使用一个循环来遍历外部向量,然后分别对每个内部向量进行排序。除非我误解了这个问题。

    【讨论】:

      【解决方案2】:

      如果您只想对内部向量进行排序,那么您可以简单地使用默认排序顺序:

      #include <algorithm>
      #include <vector>
      using namespace std;
      
      int main()
      {
          vector<vector<long>> v;
          for (auto i = v.begin(); i != v.end(); ++i)
              sort(i->begin(), i->end());
          return 0;
      }
      

      本示例使用最新版本的标准。较旧的 C++ 编译器的示例会更加冗长。

      【讨论】:

      • 不应该将其标记为 c++0x 或标记为错误,因为它不是严格意义上的 c++?
      • C++ 0x 怎么不是严格意义上的 C++?这是标准。 :) 此外,它不影响排序。我只需要写出迭代器类型并在右尖括号之间放一个空格。
      【解决方案3】:

      您不能在 C++03 中内联定义函数。最新版本的 GCC 和 MSVC 支持 C++0x lambda 函数,您可以将其用于此目的。

      【讨论】:

        【解决方案4】:

        我认为这应该很接近

        #include <vector>
        #include <algorithm>
        
        std::vector< std::vector < long >>  list;
        
        std::vector< std::vector < long >>::iterator i;
        for ( i = list.begin(); i != list.end(); ++i )
          std::sort( (*i).begin(), (*i).end() );
        

        【讨论】:

          猜你喜欢
          • 2014-07-27
          • 1970-01-01
          • 2013-01-23
          • 2017-07-28
          • 1970-01-01
          • 2013-08-27
          • 1970-01-01
          • 2015-09-06
          • 1970-01-01
          相关资源
          最近更新 更多