C++ - 使用sort函数实现自定义排序

1.背景

给你一些学生的资料数据,单个学生的资料数据包括如下内容:

class student
{
public:
    int m_age;
    int m_sex;
    string m_name;
public:
 
    student(int age,int sex,string name) :
              m_age(age),m_sex(sex),m_name(name){
    }
};

要求对由学生资料数据组成的集合进行排序,排序规则如下:按照从到小排序,年龄大的排在前边,相同年龄比较性别,性别更大的排到前边(哈哈~~)。

2. sort函数释义 与 自定义比较函数

sort 函数位于头文件 中,使用的函数原型如下:

void sort( RandomIt first, RandomIt last, Compare comp );
  • 第一个参数与第二个参数,分别填写你要排序的范围,对于一个vector(假设这个vector叫做tmpVct)来讲,如果我们需要对整个vector进行排序的话,前面两个参数填写 tmpVct.begin() 和 tmpVct.end()
  • 第三个参数为自定义的排序函数,一般其参数为容器内元素类型的cosnt 引用,比如此处:
bool compareStu(const student& s1,const student& s2){        
        if(s1.m_age>s2.m_age)
        {
            return true;
        }
 
        if(s1.m_age == s2.m_age)
        {
            return s1.m_sex>s2.m_sex;
        }
        return false;
}

3.完整案例

源代码:

include <vector>
#include 
#include 
#include 
 
using namespace std;
 
class student
{
public:
    int m_age;
    int m_sex;
    string m_name;
public:
 
    student(int age,int sex,string name) :
              m_age(age),m_sex(sex),m_name(name){
    }
};
 
bool compareStu(const student& s1,const student& s2){        
        if(s1.m_age>s2.m_age)
        {
            return true;
        }
 
        if(s1.m_age == s2.m_age)
        {
            return s1.m_sex>s2.m_sex;
        }
        return false;
}
 
int main(int argc,char** argv){
    vector<student> sV;
 
    student s1 = student(18,2,"xiao ming");
    student s2 = student(18,1,"xiao hong");
    student s3 = student(17,1,"xiao li");
 
 
    sV.push_back(s1);
    sV.push_back(s2); 
    sV.push_back(s3);
 
    sort(sV.begin(),sV.end(),compareStu); 
 
    for(auto s : sV){
        cout<<"age = "<<s.m_age<<" sex = "<<s.m_sex<<" name = "<<s.m_name<<endl;
    }
}

输出:

age = 18 sex = 2 name = xiao ming
age = 18 sex = 1 name = xiao hong
age = 17 sex = 1 name = xiao li

你可能感兴趣的:(c++)