我应该用
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>());
or
std::sort(numbers.rbegin(), numbers.rend()); // note: reverse iterators
按降序对向量排序?这两种方法有什么优点或缺点吗?
当前回答
您可以使用第一个方法,也可以尝试下面同样有效的代码
sort(&a[0], &a[n], greater<int>());
其他回答
你可以使用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<>());
这个呢?
std::sort(numbers.begin(), numbers.end());
std::reverse(numbers.begin(), numbers.end());
bool comp(int i, int j) { return i > j; }
sort(numbers.begin(), numbers.end(), comp);
事实上,第一个不是个好主意。可以用第二个,也可以用这个:
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时,您的代码就不会无声地中断。