zoukankan      html  css  js  c++  java
  • 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中调用非静态成员函数。静态成员函数或者全局函数是不依赖于具体对象的, 可以独立访问,无须创建任何对象实例就可以访问。同时静态成员函数不可以调用类的非静态成员。

  • 相关阅读:
    (最小路径覆盖) poj 1422
    (匈牙利算法) hdu 2119
    (匈牙利算法) hdu 4185
    (匈牙利算法) hdu 2063
    (匈牙利算法)hdu 1281
    (匈牙利算法DFS)hdu 3729
    (01 染色判奇环) hdu 3478
    (多重背包)poj 1276
    (判断欧拉回路)poj 1368
    (差分约束) hdu 1384
  • 原文地址:https://www.cnblogs.com/wangkundentisy/p/8982180.html
Copyright © 2011-2022 走看看