我应该用

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

你可以使用第一种方法,因为它比第二种方法效率更高。 第一种方法的时间复杂度比第二种方法小。

这个呢?

std::sort(numbers.begin(), numbers.end());
std::reverse(numbers.begin(), numbers.end());

你可以使用Lambda函数,而不是像Mehrdad建议的那样使用函子。

sort(numbers.begin(), numbers.end(), [](const int a, const int b) {return a > b; });

用c++14你可以这样做:

std::sort(numbers.begin(), numbers.end(), std::greater<>());

根据我的机器,对[1..]使用第一种方法大约需要4秒,而使用第二种方法大约需要两倍的时间。这显然说明了一些问题,但我也不明白为什么。我只是觉得这会有帮助。

这里也报道了同样的事情。

正如Xeo所说,用-O3,它们用相同的时间完成。