C++中sort排序的具体使用
文章目录
前言
一、sort函数简介
二、具体用法
1.适用对象
2.引用文件
(1)使用functional标准库或者前面加std::
(2)自定义排序
3.实例分析
4.附加内容
三、参考文献
总结
前言
最近遇到排序的问题,便整理了一下c++的sort函数及其具体用法与注意事项.
一、sort函数简介
C++ STL 标准库中的 sort() 函数,本质就是一个模板函数。该函数专门用来对容器或普通数组中指定范围内的元素进行排序,排序规则默认以元素值的大小做升序排序,除此之外我们也可以选择标准库提供的其它排序规则(比如std::greater<T>()
降序排序规则),甚至还可以自定义排序规则。
二、具体用法
1.适用对象
sort() 函数受到底层实现方式的限制,它仅适用于普通数组和部分类型的容器。换句话说,只有普通数组和具备以下条件的容器,才能使用 sort() 函数:
(1)容器支持的迭代器类型必须为随机访问迭代器。这意味着,sort() 只对 array、vector、deque 这 3 个容器提供支持。
(2)如果对容器中指定区域的元素做默认升序排序,则元素类型必须支持<
小于运算符;同样,如果选用标准库提供的其它排序规则,元素类型也必须支持该规则底层实现所用的比较运算符;
(3)sort() 函数在实现排序时,需要交换容器中元素的存储位置。这种情况下,如果容器中存储的是自定义的类对象,则该类的内部必须提供移动构造函数和移动赋值运算符。
sort默认为升序排列,倘若想要更改排序方式,一般有两种方法:
2.引用文件
必须要有的:
#include<algorithm>
sort默认为升序排列,倘若想要更改排序方式,一般有两种方法:
(1)使用functional标准库或者前面加std::
//升序:sort(begin,end,less<T>())
//降序:sort(begin,end,greater<T>())
//sort(begin,end,std::greater<T>())
注意:
sort函数的前两个参数,表示其排序范围:[begin,end),右边不包含。
#include<functional>
//升序:sort(begin,end,less<T>())
//降序:sort(begin,end,greater<T>())
//sort(begin,end,std::greater<T>())
int a[20]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<20;i++)
cout<<a[i]<<endl;
sort(a,a+20,greater<int>());
for(i=0;i<20;i++)
cout<<a[i]<<endl;
return 0;
(2)自定义排序
定义一个返回值为bool型的函数,作为第三个参数,a>b为降序;a<b为升序。
sort函数结束后,排序对象已排好,按序输出即可.
bool cmp(int a,int b)
{return a < b;
}
int a[10];
sort(a,a+10,cmp);
改进:(使用引用方法)
bool cmp(const int &a, const int &b){ return a>b;
} int a[10];
sort(a,a+10,cmp);
作为函数参数:int这种写法是值传递,const int&则是引用传递。
“值传递”——由于函数将自动产生临时变量用于复制该参数,效率较低。
“引用传递”仅借用一下参数的别名而已,不需要产生临时对象。效率较高。
tips:“引用传递”有可能改变参数,const修饰可以解决这个问题。
3.实例分析
题目:有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。
题目链接( 九度OJ的):http://ac.jobdu.com/problem.php?pid=1061
核心代码:
struct student
{int grade;char name[101];int age;
}stu[1001];bool cmp(student a,student b)
{int t = strcmp(a.name,b.name);if(a.grade != b.grade) return a.grade < b.grade; else if(t != 0)return t < 0; elsereturn a.age < b.age;
}sort(stu,stu+n,cmp);
4.附加内容
strcmp函数:比较两个字符串。设这两个字符串为str1,str2,若str1=str2,则返回零;若str1>str2,则返回正数;若str1<str2,则返回负数。
三、参考文献
http://c.biancheng.net/view/7457.html
https://blog.csdn.net/zhinanpolang/article/details/50917019
https://blog.csdn.net/diyinqian/article/details/72904404
总结
sort函数还有一些具体用法,比如对于相同值如何不更改其顺序,用stable_sort() 排序函数等等,本文只是从我个人遇到的问题出发,介绍一些其基本情况.
C++中sort排序的具体使用相关推荐
- python数组排序sort_详解python中sort排序使用
1.前言 昨天一学妹问我一个关于python的问题,当时在外忙碌,没时间细看.今天看一下,咋一看我还真的不知道这个问题,bookinfo.sort(reverse=True ,key=lambda x ...
- C++中sort()排序函数应用
** C++中sort()排序函数应用 ** sort(first_pointer,first_pointer+n,cmp) 该函数可给数组,或者链表list.向量排序. 实现原理:sort并不是简单 ...
- python中的sort排序加换行_python中sort()排序的方法
python中sort()排序的方法 发布时间:2020-09-01 10:57:52 来源:亿速云 阅读:110 作者:小新 这篇文章主要介绍了python中sort()排序的方法,具有一定借鉴价值 ...
- C++中sort排序之自定义排序cmp(入门)
咳咳,第一次写这种博客,介绍一下sort的自定义排序cmp函数: sort和cmp的实现需要的头文件有: #include<algorithm> using namespace std; ...
- linux配置文件如何排序,Linux系统中sort排序命令的使用教程
sort命令的功能是对文件中的各行进行排序.sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的.实际上,sort命令可以被认为是一个非常强大的数据管理工具,用 ...
- 关于js中sort排序的用法
关于Array.prototype.sort()方法的使用一直很模糊,今天深入理解一下. 一.Sort()默认排序 根据<JavaScript高级程序设计>中的介绍: 在默认情况下,sor ...
- 详述Java中sort排序函数
文章目录 前言 升序排序 降序排序 排序原理 前言 手写一个排序算法的效率是很慢的,当然这也不利于我们在比赛或者工程中的实战,如今几乎每个语言的标准库中都有排序算法,今天让我来给大家讲解一下Java语 ...
- linux sort 排序 性能,Linux中sort 排序
sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依 ...
- STL中 sort 排序方法
头文件:<algorithm> 排序格式:sort (a,a+n)-- 指从a[0]到a[n-1]排序,他有两种形式 (1)默认从小到大排序 (2)加cmp自定义排序方式:sort (a ...
最新文章
- 群雄逐鹿,谁会赢得自动驾驶之战?
- Sencha touch Panel之间的跳转(如不使用TabPanel或者Carousel控件而产生跳转的动画效果)...
- html css加载不了_CSS加载会阻塞页面显示?
- java string blob_java String类型转换为Blob类型
- 同省异地社保卡要换吗_攀枝花社保卡在成都住院可直接结算吗,要办理异地就医备案才行...
- TIME-WAIT状态
- 卷积神经网络完整总结
- 进化计算(七)——MOEA/D算法详解
- python如何编辑pdf_用Python实现一款永久免费的PDF编辑工具
- 泡泡龙游戏c语言程序,《泡泡龙》发射技巧总结_图文攻略_高分攻略_百度攻略...
- Windows10系统 定时开/关机设置
- 我的世界电脑服务器怎么显示键盘,我的世界基本操作按键 PC版基本操作详细介绍...
- 如何关闭机房迦卡他卡进程,让你轻松上网。
- 相机计算坐标公式_相机位姿估计3:根据两幅图像的位姿估计结果求某点的世界坐标...
- Hadoop安装配置
- SparkMLib决策树和逻辑斯蒂回归的示例
- 0基础SUMO简单入门小实例
- 浏览器在sandbox中没声音
- 高三计算机基础应用教学计划,一级计算机基础及MS,Office应用教学计划
- 功放模块设计相关-工程经验