我的编程空间,编程开发者的网络收藏夹
学习永远不晚

关于C++中sort()函数的用法,你搞明白了没

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

关于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的一道题:

首先需要对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])); });

lambda表达式详见https://www.jb51.net/article/105626.htm

可以定义创建匿名函数对象,从而简化编程工作。

这就是sort函数的强大之处,在我们平时的编程当中也会经常使用到。

到此这篇关于关于C++中sort()函数的用法,你搞明白了没的文章就介绍到这了,更多相关sort()函数的用法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

关于C++中sort()函数的用法,你搞明白了没

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

关于C++中sort()函数的用法,你搞明白了没

这篇文章主要介绍了关于C++中sort()函数的用法,并通过三种方法介绍了按降序排列的实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录