文章目录

  • 前言

    一、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排序的具体使用相关推荐

  1. python数组排序sort_详解python中sort排序使用

    1.前言 昨天一学妹问我一个关于python的问题,当时在外忙碌,没时间细看.今天看一下,咋一看我还真的不知道这个问题,bookinfo.sort(reverse=True ,key=lambda x ...

  2. C++中sort()排序函数应用

    ** C++中sort()排序函数应用 ** sort(first_pointer,first_pointer+n,cmp) 该函数可给数组,或者链表list.向量排序. 实现原理:sort并不是简单 ...

  3. python中的sort排序加换行_python中sort()排序的方法

    python中sort()排序的方法 发布时间:2020-09-01 10:57:52 来源:亿速云 阅读:110 作者:小新 这篇文章主要介绍了python中sort()排序的方法,具有一定借鉴价值 ...

  4. C++中sort排序之自定义排序cmp(入门)

    咳咳,第一次写这种博客,介绍一下sort的自定义排序cmp函数: sort和cmp的实现需要的头文件有: #include<algorithm> using namespace std; ...

  5. linux配置文件如何排序,Linux系统中sort排序命令的使用教程

    sort命令的功能是对文件中的各行进行排序.sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的.实际上,sort命令可以被认为是一个非常强大的数据管理工具,用 ...

  6. 关于js中sort排序的用法

    关于Array.prototype.sort()方法的使用一直很模糊,今天深入理解一下. 一.Sort()默认排序 根据<JavaScript高级程序设计>中的介绍: 在默认情况下,sor ...

  7. 详述Java中sort排序函数

    文章目录 前言 升序排序 降序排序 排序原理 前言 手写一个排序算法的效率是很慢的,当然这也不利于我们在比赛或者工程中的实战,如今几乎每个语言的标准库中都有排序算法,今天让我来给大家讲解一下Java语 ...

  8. linux sort 排序 性能,Linux中sort 排序

    sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始!   1 sort的工作原理   sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依 ...

  9. STL中 sort 排序方法

    头文件:<algorithm> 排序格式:sort (a,a+n)--  指从a[0]到a[n-1]排序,他有两种形式 (1)默认从小到大排序 (2)加cmp自定义排序方式:sort (a ...

最新文章

  1. 群雄逐鹿,谁会赢得自动驾驶之战?
  2. Sencha touch Panel之间的跳转(如不使用TabPanel或者Carousel控件而产生跳转的动画效果)...
  3. html css加载不了_CSS加载会阻塞页面显示?
  4. java string blob_java String类型转换为Blob类型
  5. 同省异地社保卡要换吗_攀枝花社保卡在成都住院可直接结算吗,要办理异地就医备案才行...
  6. TIME-WAIT状态
  7. 卷积神经网络完整总结
  8. 进化计算(七)——MOEA/D算法详解
  9. python如何编辑pdf_用Python实现一款永久免费的PDF编辑工具
  10. 泡泡龙游戏c语言程序,《泡泡龙》发射技巧总结_图文攻略_高分攻略_百度攻略...
  11. Windows10系统 定时开/关机设置
  12. 我的世界电脑服务器怎么显示键盘,我的世界基本操作按键 PC版基本操作详细介绍...
  13. 如何关闭机房迦卡他卡进程,让你轻松上网。
  14. 相机计算坐标公式_相机位姿估计3:根据两幅图像的位姿估计结果求某点的世界坐标...
  15. Hadoop安装配置
  16. SparkMLib决策树和逻辑斯蒂回归的示例
  17. 0基础SUMO简单入门小实例
  18. 浏览器在sandbox中没声音
  19. 高三计算机基础应用教学计划,一级计算机基础及MS,Office应用教学计划
  20. 功放模块设计相关-工程经验

热门文章

  1. 弘玑Cyclone RPA为国金证券提供技术支撑,超200个业务场景实现流程自动化
  2. Dijkstra算法 ——四人过桥
  3. 网络嗅探软件全接触(2)
  4. 键盘win键和alt键功能互换解决办法(亲测实用)
  5. MATLAB改变默认工作路径
  6. 现代经典搞笑300篇笑话
  7. 关于面试自动化测试可能问到的内容
  8. Unity 2020.3.21f1c1 install and WebGL module download
  9. 优美语句 优美文段摘抄(96个精彩语段)
  10. Omnigraffle Pro 6注册码/许可证