Excaliburer`s Zone

It was challenging, but not risky.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

posted on 2018-05-02 20:06  Excaliburer  阅读(1945)  评论(0编辑  收藏  举报