我应该用

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

or

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

按降序对向量排序?这两种方法有什么优点或缺点吗?


当前回答

事实上,第一个不是个好主意。可以用第二个,也可以用这个:

struct greater
{
    template<class T>
    bool operator()(T const &a, T const &b) const { return a > b; }
};

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

这样,当有人决定数字应该保持long或long long而不是int时,您的代码就不会无声地中断。

其他回答

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

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

这个呢?

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

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

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

第一种方法是指:

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

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

事实上,第一个不是个好主意。可以用第二个,也可以用这个:

struct greater
{
    template<class T>
    bool operator()(T const &a, T const &b) const { return a > b; }
};

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

这样,当有人决定数字应该保持long或long long而不是int时,您的代码就不会无声地中断。