C ++矢量排序简单

时间:2011-07-12 21:10:40

标签: c++ sorting vector

好的,我有一个vector< vector < long >>,我希望将最里面的向量从最小到最大排序 - 即我希望在排序时将vector < long >排序为3,7,21。

以前曾经问过这个问题,但我想这样做非常简单,以便非程序员能够理解。我已经看到我可以创建一个函数或函子来排序as in this question.有没有办法在不创建额外排序功能的情况下执行此操作?我正在做这个作为课程的一部分,我希望有一种方法可以做到这一点,而不必让人们在我的代码中搜索简单的排序函数。

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

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

4 个答案:

答案 0 :(得分:3)

std :: sort函数使用std::less<T>函数作为默认排序。要获得逆序,请明确使用std::greater<T>函数。

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

我认为这应该非常接近

#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() );

答案 3 :(得分: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 ++编译器的一个例子会更冗长。