• C++中sort函数小结


      我们都知道,sort函数是C++标准库<algorithm>中的一个库函数。它的功能是对数组/容器中的元素进行排序。用法示例如下:

    一.对数组进行排序

    示例:

        int a[] = {1,3,7,2};
        sort(a,a + 4);
    

    这种情况下(即默认情况下),实际上是对数组a进行升序排序。我们也可以修改sort函数中的第三个参数内容,来实现自定义排序。

    示例:

    bool cmp(int a, int b)
    {
        return a > b;
    }
    int main()
    {
    
        int a[] = {1,3,7,2};
        sort(a,a + 4,cmp);
    }
    

    通过自定义cmp函数,就实现了对数组a进行降序排序。当然此处的cmp中的规则比较简单,也可以对结构体、类等其他复杂类型的数据进行排序,不过cmp的内容往往都要改写。(cmp函数是用于定义比较规则的,sort函数正是基于这种规则进行排序的)

    二.对容器进行排序(以vector为例)

    示例:

     vector<int> a = {1,3,7,2};
     sort(a.begin(),a.end());
    

    同数组排序类似,只不过函数的参数不同。降序排序的实现同前面一样。

    三.注意事项

      如果要把sort函数要被类中成员函数调用且使用自定义的cmp函数的话,此时cmp函数必须是static函数或者是全局的。

    示例:

    class test {
        static bool cmp(int a,int b)
        {
            return a > b;
        }
    
    public:
        void fun(vector<int>& a)
        {
            sort(a.begin(),a.end(),cmp);
        }
    };

    sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错。这是 因为:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中调用非静态成员函数。静态成员函数或者全局函数是不依赖于具体对象的, 可以独立访问,无须创建任何对象实例就可以访问。同时静态成员函数不可以调用类的非静态成员。

  • 相关阅读:
    HTML5中drag和drop使用
    E
    D
    杜教BM(解决线性递推式的模板)
    Myeclipse下载安装破解详细版
    D
    IDEA-连接MySQL连不上
    E
    C
    D. Ball(树状数组三维排序,求是否存在三个值都比自己大的人)
  • 原文地址:https://www.cnblogs.com/wangkundentisy/p/8982180.html
Copyright © 2020-2023  润新知