C++ 向量排序简单地说

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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() );

【讨论】:

以上是关于C++ 向量排序简单地说的主要内容,如果未能解决你的问题,请参考以下文章

为啥简单的 C++ 向量函数会产生越界的下标? [复制]

Swig:返回向量的接口简单 C++ 类

如何在 C++ 中逐个元素地比较两个向量的相等性?

C++ vector类型要点总结(以及各种algorithm算法函数)

(C++) sort() 中第三个参数的决策结构

C++容器