[c++] 按降序排列矢量



Answers

使用第一个:

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

它明确了发生了什么 - 即使发表了评论,也很少有人误读rbegin 。 它清晰可读,正是你想要的。

此外,第二个可能效率比第一个给出反向迭代器的本质效率低,尽管你必须对其进行简要描述。

Question

我应该使用

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

要么

std::sort(numbers.rbegin(), numbers.rend());   // note: reverse iterators

按降序排列矢量? 一种方法或另一种方法有什么好处或缺点?




我认为你不应该在问题中使用任何一种方法,因为它们都令人困惑,而第二种方法就像Mehrdad所说的那样脆弱。

我会主张以下内容,因为它看起来像一个标准的库函数,并且明确地表达了它的意图:

#include <iterator>

template <class RandomIt>
void reverse_sort(RandomIt first, RandomIt last)
{
    std::sort(first, last, 
        std::greater<typename std::iterator_traits<RandomIt>::value_type>());
}



第一种方法是指:

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

您可以使用第一种方法,因为比第二种方法获得更高的效率。
第一种方法的时间复杂度低于第二种方法。




那这个呢?

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



Mehrdad提出的并非函子,你可以使用Lambda函数。

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





Related