微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++中的sort()函数怎么使用

这篇文章主要介绍“C++中的sort()函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++中的sort()函数怎么使用”文章能帮助大家解决问题。

    sort(v.begin(),v.end(),cmp),它是用来对一组序列进行排序的。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,包含在头文件#include<algorithm>的c++标准库中。

            其有三个参数,前两个参数是待排序区间;第三个参数可有可无(第三个参数代表比较规则),没有第三个参数的时候,sort()认按升序排列,有第三个参数的时候,可以通过这个参数实现各种各样的排序,包括降序。sort()函数功能强大就是强大在第三个参数。

            sort()函数除了可以对int型、char型、double型、字符串排序外,还可以实现对结构体、链表、pair、vector、等类型进行排序,但需要自己写比较函数。而且sort()既可以对数组排序,也可以对vector容器排序。下面就先说一下sort()只有两个参数时的用法,具体代码见下:

     #include<iostream>
      #include<vector>
      #include<string>
      #include<algorithm>
      using namespace std;
      int main()
      {
          int a[10]={6,5,4,8,3,9,7,10,1,2};
          char b[8]={'h','z','l','n','m','r','d','g'};
         vector<double> v1;
         vector<string> v2;
        
         sort(a+1,a+9);    //可以指定任意合法的排序区间,不能越界
     
         sort(b,b+8);     //对整个b排序
     
         sort(v1.begin(),v1.end());//输入两个迭代器从而排序一个范围
     
         sort(v2.begin(),v2.end());
     
         return 0;
     }

    上面几种方法都是升序排列,要想按降序排列,有3种方法可以实现:

    1. sort()函数只有两个参数时认升序排列,在排完序后,再用reverse()函数把整个序列给翻转一下,这样序列就变成了降序。

         sort(a+1,a+9);    //可以指定任意合法的排序区间,不能越界
         reverse(a+1,a+9);
          sort(b,b+8);     //对整个b排序
         reverse(b,b+8);
         sort(v1.begin(),v1.end());
         reverse(v1.begin(),v1.end());
         sort(v2.begin(),v2.end());
         reverse(v2.begin(),v2.end());

    2. 借助c++标准库来实现降序(或升序)。此时要包含头文件<functional>,<functional>头文件提供了一些基于模板的比较函数对象,这里在排序的时候只用到了 greater<type>() 和 less<type>() 两个;让 greater<type>() 或 less<type>() 做sort()函数的第三个参数来实现升序或降序排列;其中greater<type>() 用于降序排列,less<type>() 用于升序排列

         sort(a,a+10,greater<int>());//降序排列
        sort(a,a+10,less<int>());//升序排列

    3. 第三个方法是自己写一个比较函数来实现升序或降序排列,并让这个比较函数做sort()函数的第三个参数;比较函数不仅能实现升序降序排列,还能实现其他的功能

    这就是sort()函数功能强大的地方,它可以扩展,而扩展的关键就是第三个参数。

        先说一下比较函数,当你想实现特定比较方式的时候,就要自己定义一个返回bool值的比较函数了;这时sort()函数的第三个参数就是一个函数,如果它返回假值就交换操作对象的位置,返回真值的话操作对象位置不变。下面就用比较函数来实现升序降序的排列:

    首先实现比较函数,注意比较函数参数数据类型要与需要比较的对象一致:

      bool cmp1(int a,int b)  //按降序排列
      {
          return a>b;
      }
      
     bool cmp2(int a,int b)  //按升序排列
     {
         return a<b;
     }

    然后调用sort函数即可,此时不需要给比较函数传入参数,比较函数只是确定比较的规则。

         sort(v.begin(),v.end(),cmp1);   //这里不需要对比较函数cmp1传入参数
     
         sort(v.begin(),v.end(),cmp2);   不需要对比较函数cmp2传入参数

     另外比较函数可以用lambda表达式来写,这是leetcode  hot100的一道题:

    C++中的sort()函数怎么使用

    首先需要对people的vector按照hi进行从小到大的升序排列,对于相同的hi再按照ki进行从大到小的降序排序,我们使用sort中第三个参数的强大功能,就能够自己定义比较规则,一条语句就能实现我们需要的排序。代码如下:

    //排序,方法使用lambda表达式
    		sort(people.begin(), people.end(), [](vector<int>& a, vector<int>& b) -> bool {return (a[0] < b[0]) || ((a[0] == b[0]) && (a[1] > b[1])); });

    关于“C++中的sort()函数怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程之家行业资讯频道,小编每天都会为大家更新不同的知识点。

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

    相关推荐