sort()函数的用法
sort(v.begin(),v.end(),cmp),它是用来对一组序列进行排序的。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,包含在头文件为#include<algorithm>的c++标准库中。
其有三个参数,前两个参数是待排序区间;第三个参数可有可无(第三个参数代表比较规则),没有第三个参数的时候,sort()默认按升序排列,有第三个参数的时候,可以通过这个参数实现各种各样的排序,包括降序。sort()函数功能强大就是强大在第三个参数。
sort()函数除了可以对int型、char型、double型、字符串排序外,还可以实现对结构体、链表、pair、vector、等类型进行排序,但需要自己写比较函数。而且sort()既可以对数组排序,也可以对vector容器排序。下面就先说一下sort()只有两个参数时的用法,具体代码见下:
1 #include<iostream>2 #include<vector>3 #include<string>4 #include<algorithm>5 using namespace std;6 int main()7 {8 int a[10]={6,5,4,8,3,9,7,10,1,2};9 char b[8]={'h','z','l','n','m','r','d','g'};
10 vector<double> v1;
11 vector<string> v2;
12
27 sort(a+1,a+9); //可以指定任意合法的排序区间,不能越界
30
35 sort(b,b+8); //对整个b排序
38
43 sort(v1.begin(),v1.end());//输入两个迭代器从而排序一个范围
46
51 sort(v2.begin(),v2.end());55 return 0;
56 }
上面几种方法都是升序排列,要想按降序排列,有3种方法可以实现:
1. sort()函数只有两个参数时默认升序排列,在排完序后,再用reverse()函数把整个序列给翻转一下,这样序列就变成了降序。
27 sort(a+1,a+9); //可以指定任意合法的排序区间,不能越界
31 reverse(a+1,a+9);39 sort(b,b+8); //对整个b排序
43 reverse(b,b+8);46
51 sort(v1.begin(),v1.end());
55 reverse(v1.begin(),v1.end());63 sort(v2.begin(),v2.end());
67 reverse(v2.begin(),v2.end());
2. 借助c++标准库来实现降序(或升序)。此时要包含头文件<functional>,<functional>头文件提供了一些基于模板的比较函数对象,这里在排序的时候只用到了 greater<type>() 和 less<type>() 两个;让 greater<type>() 或 less<type>() 做sort()函数的第三个参数来实现升序或降序排列;其中greater<type>() 用于降序排列,less<type>() 用于升序排列
14 sort(a,a+10,greater<int>());//降序排列19 sort(a,a+10,less<int>());//升序排列
3. 第三个方法是自己写一个比较函数来实现升序或降序排列,并让这个比较函数做sort()函数的第三个参数;比较函数不仅能实现升序降序排列,还能实现其他的功能。
这就是sort()函数功能强大的地方,它可以扩展,而扩展的关键就是第三个参数。
先说一下比较函数,当你想实现特定比较方式的时候,就要自己定义一个返回bool值的比较函数了;这时sort()函数的第三个参数就是一个函数,如果它返回假值就交换操作对象的位置,返回真值的话操作对象位置不变。下面就用比较函数来实现升序降序的排列:
首先实现比较函数,注意比较函数参数数据类型要与需要比较的对象一致:
5 bool cmp1(int a,int b) //按降序排列6 {7 return a>b;8 }9
10 bool cmp2(int a,int b) //按升序排列
11 {
12 return a<b;
13 }
然后调用sort函数即可,此时不需要给比较函数传入参数,比较函数只是确定比较的规则。
23 sort(v.begin(),v.end(),cmp1); //这里不需要对比较函数cmp1传入参数28 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.cnblogs.com/jimodetiantang/p/9016826.html
可以定义创建匿名函数对象,从而简化编程工作。
这就是sort函数的强大之处,在我们平时的编程当中也会经常使用到。
sort()函数的用法相关推荐
- C++ sort函数的用法
C++ sort函数的用法 STL有个排序函数sort,可以直接对数组和向量排序. 一.功能:给定区间所有元素进行排序 二.头文件: #include <algorithm> 三.sort ...
- C++ sort()函数的用法
C++sort()函数的用法 C++sort()函数的用法 近来看了c++标准库这本书,学到了很多,就把这其中的一点C++sort()函数的用法写下来和大家分享吧! (一)为什么要用c++标准库里的排 ...
- sort函数排序用法
具体用法在上一篇博客中已经说明了,主要是sort函数实现了将数组数按从大到小的顺序给进行了排列,要注意的一点就是在头文件中声明#include跟#include,其次就是在调用函数时可以是sort(a ...
- leetcode(3)——414. 第三大的数(C++中的 set,::作用符号,迭代器),628 三个数的最大乘积(sort函数的用法)
文章目录 前言 414 程序 疑惑 set ::在c++中什么意思 一.作用域符号: 二.全局作用域符号: 三.作用域分解运算符: C++ 迭代器 628 程序 疑惑 sort函数 前言 大佬的程序, ...
- sort函数的用法(C++排序库函数的调用)对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了。
对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了. (一)为什么要用c++标准库里的排序函数 Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c+ ...
- sort() 函数的用法
一.sort 函数的基本知识 1.sort 函数位于头文件 #include<algorithm> 中,是C++标准库中的函数. 2.sort 函数原型如下,包含三个参数分别为 void ...
- C++sort函数的用法
(一)为什么要用c++标准库里的排序函数 Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于 ...
- MATLAB中排序sort函数的用法
几个例子,固有频率组W=[4 3 1 2 14 12 13 11], 振型G=[2 6 3 4 8 5 3 2]: 问题是此时想把频率按照从小到大排序,同时保证振型和频率一一对应. 程序为 w=[4 ...
- 关于结构体的sort函数的用法
引入一个问题: 链接:https://ac.nowcoder.com/acm/contest/911/D来源:牛客网 有 n件商品,第 i件商品价格为 a[i],购买后,其它所有未购买的商品价格乘上 ...
最新文章
- Gartner:2012年大数据HypeCycle
- Cisco2811基本操作
- 把自己当成打工的,一辈子都是打工的!:周鸿祎
- 有关UNLIMITED TABLESPACE权限
- 最新Modis影像数据下载完整流程---以MOD13Q1 NDVI数据下载为例(2020年12月2日更新)
- nova— 计算服务
- [转]windows 2003 开启远程桌面
- vmware安装linux.iso
- 阿里云keepalived的虚拟ip怎么让外网访问_Nginx之Keepalived高可用工具
- [Simulink] 从S函数到模块代码生成
- 三星note9刷Android9,【极光ROM】-【三星NOTE9 N960X-9810】-【V21.0 Android-Q-THB】
- 〖Python APP 自动化测试实战篇①〗 - 大话闲扯 APP 自动化
- 微信公众号应用开发(一)
- Arduino 系列传感器应用
- Adobe Creative Cloud登陆中国大陆市场
- c语言一个数平方表示,C语言 - 利用 汇编思想 写一个数的平方
- 兄弟连Linux(二)--Linux常用命令
- 生活随记 - 2020国庆第二天
- 重磅丨FIL10月减产即将到来 2分钟了解FIL分配模型
- [PYTHON]批量合并WORD文档,DOCX格式