sort函数自定义比较函数
    sort函数是C++ STL中的一个非常实用的函数,可以对数组、容器等进行排序,其中最常用的是对数组进行排序。sort函数默认排序方式是递增,但是有时候我们需要对不同类型的数据,或者对同一类型但是有不同的比较方式进行排序,这时候就需要自定义比较函数。
    自定义比较函数的基础知识
    自定义比较函数是通过函数指针来实现的,在C++中函数指针的声明格式如下:
    ```
    返回值类型 (*函数名) (参数列表);
    ```
    其中,括号中的星号表示这是一个函数指针,括号中的参数列表表示这个函数需要传入什么参数。比如,下面是一个函数指针的声明示例:
    ```
    bool (*compareFunc) (int a, int b);
    ```
    这个函数指针的名称是compareFunc,它的类型是bool,表示这个函数会返回一个bool类型的值。这个函数需要传入两个int类型的参数a和b,用来进行比较。
    比较函数的实现
    接下来我们就来实现一个简单的自定义比较函数,这个比较函数可以对int类型的数组进行排序。
    我们先来看一下sort函数的默认实现方式:
    ```
    template <typename T>
    void sort(T* first, T* last)
    {
        ...
    }
    ```
    这个函数有两个参数,分别为指向首元素和末元素之后位置的指针。其中T是一个模板参数,表示这个数组所存储的元素的数据类型。我们可以看到,sort函数的实现并不是通过传入一个比较函数的参数来实现的,而是通过默认的小于号运算符进行比较的。因此,如果我们需要对不同类型的数据进行排序,就需要改变这个比较方式。字符串比较函数实现
    这个函数的返回值类型是bool型,返回值表示a是否大于b。如果a大于b,则返回true,否则返回false。根据这个比较函数,我们可以使用sort函数对一个int类型的数组进行排序,代码如下:
    ```
    int arr[] = { 5, 3, 7, 1, 2, 6, 4 };
    sort(arr, arr + 7, compare);
    ```
    第一个参数是数组的首元素指针,第二个参数是数组的末元素位置指针,第三个参数则是指向自定义比较函数的函数指针。
    自定义比较函数可以用于任何需要排序的场景,主要包括以下两种情况:
    1.对不同数据类型进行排序。比如说,通过对一个存储字符串的数组进行排序,可以从小到大或者从大到小排列字符串。
    需要注意的是,在定义自定义比较函数时,我们要注意函数名和参数列表必须和sort函数所要求的一致,否则会导致编译错误。
    下面是一个使用自定义比较函数对学生进行排序的例子。假设我们有如下的学生结构体:
    现在,我们希望按照以下顺序对学生进行排序:
    1.按照年龄从小到大排序。
    代码示例如下:
    ```
    bool compare(const Student& s1, const Student& s2)
    {
        if (s1.age != s2.age)
            return s1.age < s2.age;
        else
            return s1.score > s2.score;
    }
    stu[1].name = "李四";
        stu[1].age = 18;
        stu[1].score = 92.0f;
    return 0;
    }
    ```
    在这个例子中,我们首先定义了一个包含三个学生的数组,并初始化了这三个学生的信息。接下来,我们使用自定义比较函数对学生进行排序,sort函数会根据年龄排序并显示结果。如果有两位同龄的学生,就会根据成绩高低进行第二次排序,直到所有学生的位置都排列好。
    总结

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。