我有
sort(arr, arr+n, pred);
如何按相反顺序排序?
答案 0 :(得分:9)
似乎也有可能使用反向迭代器...除了使用反向谓词可能更容易,除非类型没有实现operator>
:)
#include <iostream>
#include <algorithm>
#include <iterator>
int main()
{
int arr[4] = { 3, 2, 5, 4 };
std::sort(std::reverse_iterator<int*>(arr + 4), std::reverse_iterator<int*>(arr));
}
答案 1 :(得分:4)
如果你被给予pred
(即你无法进入它以扭转秩序),那就像:
std::sort(arr, arr+n, boost:bind<bool>(pred, _2, _1));
答案 2 :(得分:3)
您可以使用标准库中的greater
自动调用operator>
作为您要排序的类型。
#include <funcitonal>
.....
sort(arr, arr+n, greater<Type>()); // Type could be double for example
答案 3 :(得分:2)
取消pred
的返回值。
答案 4 :(得分:1)
正如阿拉迪所说,你应该提供一个反向的谓词。如果由于某些原因(如纯粹的懒惰)你不能,你可以随时先排序然后反转:
sort(arr, arr+n, pred);
reverse( arr, arr+n );
这对计算机来说会更有用,但它很明确并且能够完成工作。如果您需要此类速度性能,请使用反向谓词解决方案。
答案 5 :(得分:0)
我觉得很容易
std::sort(myVec.rbegin(),myVec.rend());
int main()
{
typedef std::vector<int> vecType;
vecType myVec;
for(int a=0;a<20;a++)
{
myVec.push_back((rand()%100));
}
std::copy(myVec.begin(), myVec.end(), std::ostream_iterator<int>(std::cout, "\n"));
cout<<"\n---------------------------------------------------\n";
std::sort(myVec.rbegin(),myVec.rend());
std::copy(myVec.begin(), myVec.end(), std::ostream_iterator<int>(std::cout, "\n"));
return 0;
}
答案 6 :(得分:0)
sort(arr, arr+n, std::not1(pred));