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++ 向量排序简单地说的主要内容,如果未能解决你的问题,请参考以下文章