c++ matlab排序大到小 - 按降序排列矢量




6 Answers

其实,第一个是一个坏主意。 使用第二个 ,或者这个:

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

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

这样,当有人决定numbers应该longlong long而不是int时,你的代码不会默默地破坏。

set排序 set从大到小

我应该使用

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

要么

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

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




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

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



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

同样的事情here报道

正如Xeo所说,使用-O3他们大约在同一时间完成。




bool comp(int i, int j) { return i > j; }
sort(numbers.begin(), numbers.end(), comp);



您可以使用第一个或尝试下面的代码,这是同样有效的:

sort(a,a+n+1,greater<int>());



最短的方法是:

std::sort(v.rbegin(), v.rend());



Related

c++ sorting stl vector iterator