C++ 有个sort函数,可用于容器的快速排序,默认是从小到大排序,但是如果我们想要从大到小排序,该怎么办呢?
一共有三种方式:
greater()/less()
举例:
#include
#include
using namespace std;
bool cmp(int x,int y){
return x>y;
}
int main(){
int arr[5] = {5,3,8,4,-2};
sort(arr,arr+5, cmp);
for(int i = 0; i < 5; i++){
cout<<arr[i]<<" ";
}
return 0;
}
struct Node {
int id,vip;
// friend bool operator<(Node X,Node Y){
// if(X.vip==Y.vip){
// return X.id < Y.id;//vip一样,id越大,Node越小
// }else{
// return X.vip > Y.vip;// vip不同,vip越小,Node越小.
// }
// }
bool operator<(const Node &Y) const{
if(vip==Y.vip) {
return id<Y.id;
} else {
return vip>Y.vip;
}
}
};
但是对于priority_queue当返回值为true时,进行交换,但为false时不进行交换.同样对于基本类型传入less是大根堆,从小到大排序.传入greater是小根堆,从大到小排序.这是由底层代码决定的.
struct Node {
int id,vip;
// friend bool operator<(Node X,Node Y){
// if(X.vip==Y.vip){
// return X.id > Y.id;//vip一样,id越大,Node越小
// }else{
// return X.vip < Y.vip;// vip不同,vip越小,Node越小.
// }
// }
bool operator<(const Node &Y) const{
if(vip==Y.vip) {
return id>Y.id;
} else {
return vip<Y.vip;
}
}
};
比赛时,根据需要进行选择!