我应该用
std::sort(numbers.begin(), numbers.end(), std::greater<int>());
or
std::sort(numbers.rbegin(), numbers.rend()); // note: reverse iterators
按降序对向量排序?这两种方法有什么优点或缺点吗?
我应该用
std::sort(numbers.begin(), numbers.end(), std::greater<int>());
or
std::sort(numbers.rbegin(), numbers.rend()); // note: reverse iterators
按降序对向量排序?这两种方法有什么优点或缺点吗?
当前回答
bool comp(int i, int j) { return i > j; }
sort(numbers.begin(), numbers.end(), comp);
其他回答
使用第一个:
std::sort(numbers.begin(), numbers.end(), std::greater<int>());
它清楚地显示了正在发生的事情——将rbegin误读为begin的可能性更小,甚至带有注释。它清晰易读,这正是你想要的。
另外,考虑到反向迭代器的性质,第二个迭代器的效率可能比第一个要低,尽管您必须对它进行分析以确定。
这个呢?
std::sort(numbers.begin(), numbers.end());
std::reverse(numbers.begin(), numbers.end());
根据我的机器,对[1..]使用第一种方法大约需要4秒,而使用第二种方法大约需要两倍的时间。这显然说明了一些问题,但我也不明白为什么。我只是觉得这会有帮助。
这里也报道了同样的事情。
正如Xeo所说,用-O3,它们用相同的时间完成。
bool comp(int i, int j) { return i > j; }
sort(numbers.begin(), numbers.end(), comp);
用c++14你可以这样做:
std::sort(numbers.begin(), numbers.end(), std::greater<>());