vector支持sort函数,但是默认是升序。如果要降序呢?
那么可以这样操作:
方法一:升序排序之后,用 reverse 反转即可。
方法二:重写sort第三个参数
重写sort第三个参数:
对于常见的数据类型,int、string等我们可以直接重写一个函数或者lambda表达式。
重写函数:
sort(begin(vec), end(vec), cmp);
bool cmp(const int& a, const int& b){
return a <= b ;//升序
}
bool cmp(const int& a, const int& b){
return a > b ;//降序
}
lambda表达式:
sort(begin(vec), end(vec), [](const int& a, const int& b) { return a <= b });//升序
sort(begin(vec), end(vec), [](const int& a, const int& b) { return a > b });//降序
对于排序的是类和的体我们可以用operator 运算符来比较
结构体或者类对象:
struct Student{
string name;
int grade;
Student(string name, int grade) : name(name), grade(grade){}
bool operator < (const Student& rhs) const{
return grade < rhs.grade
|| (grade == rhs.grade && name < rhs.name);
}
boolo perator > (ostream& output, const Student& s){
return grade > rhs.grade
|| (grade == rhs.grade && name > rhs.name);
}
};
当然你也可以使用lambda表达式在来对比较:
sort(begin(vec), end(vec), [](const Student& lhs, const Student& rhs) {
return lhs.grade < rhs.grade
|| (lhs.grade == rhs.grade && lhs.name < rhs.name); });