我应该用

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

它清楚地显示了正在发生的事情——将rbegin误读为begin的可能性更小,甚至带有注释。它清晰易读,这正是你想要的。

另外,考虑到反向迭代器的性质,第二个迭代器的效率可能比第一个要低,尽管您必须对它进行分析以确定。

其他回答

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

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

使用第一个:

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

它清楚地显示了正在发生的事情——将rbegin误读为begin的可能性更小,甚至带有注释。它清晰易读,这正是你想要的。

另外,考虑到反向迭代器的性质,第二个迭代器的效率可能比第一个要低,尽管您必须对它进行分析以确定。

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

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

您可以使用第一个方法,也可以尝试下面同样有效的代码

sort(&a[0], &a[n], greater<int>());

这个呢?

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