C++中sort函数
基本语法
首先,C++中使用sort函数的时候需要加上头文件#include<algorithm>
。
并且sort函数的语法格式为:
void sort (RandomAccessIterator first, RandomAccessIterator last);
也可以自定义排序规则comp
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
注意:从sort函数语法格式中的RandomAccessIterator
就能看出,sort只能用在容器支持的迭代器类型必须为随机访问的迭代器。
复杂度
STL的sort()算法,数据量大时采用快速排序(Quick Sort),分段递归排序。一旦分段后的数据量小于某个阈值,为避免Quick Sort的递归调用带来过大的额外开销,就改用Insertion Sort(插入排序)。如果递归层次过深,还会改用Heap Sort(堆排序)。
快排的思想就是分段递归,具体可以参考本连接。
因此平均时间复杂度为:O(nlogn)
哪些容器能用sort函数
string容器
vector容器
deque容器
以上三种容器都可以使用sort函数。
以下几种容器不能使用sort函数。
C++中,set 和 map 分别提供以下三种数据结构,其底层实现以及优劣如下表所示:
集合 | 底层实现 | 是否有序 | 数值是否可以重复 | 能否更改数值 | 查询效率 | 增删效率 |
---|---|---|---|---|---|---|
std::set | 红黑树 | 有序 | 否 | 否 | O(nlogn) | O(nlogn) |
std::multiset | 红黑树 | 有序 | 是 | 否 | O(nlogn) | O(nlogn) |
std::unordered_set | 哈希表 | 无序 | 否 | 否 | O(1) | O(1) |
红黑树是一种平衡二叉搜索树,所以key值是有序的,但key不可以修改,改动key值会导致整棵树的错乱,所以只能删除和增加。
映射 | 底层实现 | 是否有序 | 数值是否可以重复 | 能否更改数值 | 查询效率 | 增删效率 |
---|---|---|---|---|---|---|
std::map | 红黑树 | key有序 | key不可重复 | key不可修改 | O(nlogn) | O(nlogn) |
std::multimap | 红黑树 | key有序 | key可重复 | key不可修改 | O(nlogn) | O(nlogn) |
std::unordered_map | 哈希表 | key无序 | key不可重复 | key不可修改 | O(1) | O(1) |
此外,map支持下标操作,set不支持下标操作。
以上两表来源
从上面表格可以看出set、multiset、map、multimap、unordered_set、unordered_map都不能使用sort函数进行排序。
如果需要将其排序的话,需要借助vector容器。
unordered_map<char, int> map;
//map容器赋值后,再新建一个vector容器,并初始化如下:
vector<pair<char, int>> v(map.begin(), map.end());
从而再借助自定义的sort函数中comp
排序规则
//以map中value值的升序排序
bool mysort(pair<char, int>& p1, pair<char, int>& p2) {return p1.second < p2.second;
}
//从而运用sort函数排序
sort(v.begin(), v.end(), mysort);
对于list容器的sort函数,不能使用algorithm
下的sort()
函数,但是可以使用list容器自带的sort进行排序
list<int> l;
l.sort(); //默认从小到大排序
也可以自定义排序
bool myCompare(int val1 , int val2)
{return val1 > val2;
}
l.sort(myCompare); //指定排序规则,从大到小
C++中sort函数相关推荐
- matlab sort descend,详解Matlab中 sort 函数用法
搜索热词 (1)B=sort(A) 对一维或二维数组进行升序排序,并返回排序后的数组,当A为二维时,对数组每一列进行排序. eg: A=[1,5,3],则sort(A)=[1,3,5] A=[1,3; ...
- php sort函数,php中sort函数的功能起什么作用呢?
摘要: 下文讲述php中sort函数的功能讲解,如下所示: sort函数功能说明: 对数组中元素值按照字母的升序进行排序 sort语法: sort(array,sortingtype); ------ ...
- java中sort函数的使用
java中sort函数的使用 写在前面 sort函数的基本格式 第一种基本格式 第二种基本格式 第三种基本格式cmp 函数的基本格式 写在前面 想必大家都知道C++里面的sort用过的都知道这个函数是 ...
- C++中SORT函数使用方法
C++中SORT函数使用方法 一.sort函数 1.sort函数包含在头文件为#include的c++标准库中,调用标准库里的排序方法可以实现对数据的排序,但是sort函数是如何实现的,我们不用考虑! ...
- php之sort,php中sort函数的使用方法
php中sort函数的使用方法 发布时间:2020-09-08 10:44:27 来源:亿速云 阅读:99 作者:小新 小编给大家分享一下php中sort函数的使用方法,相信大部分人都还不怎么了解,因 ...
- sort函数降序排列matlab,详解Matlab中 sort 函数用法
(1)B=sort(A) 对一维或二维数组进行升序排序,并返回排序后的数组,当A为二维时,对数组每一列进行排序. eg: A=[1,5,3],则sort(A)=[1,3,5] A=[1,5,3;2,4 ...
- python中sort函数是什么意思_python中sort和sorted函数
在学习python的过程中,感觉python中的排序相和c++中的泛型算法还是比较相似的,但相对于c++而言更加简单易用. python中列表的内置函数sort()可以对列表中的元素进行排序,而全局性 ...
- python中sort函数源代码_Python中sort和sorted函数代码解析
Python中sort和sorted函数代码解析 本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sor ...
- C++中sort函数从大到小排序的两种方法
1.sort函数描述 而且,sort函数的算法效率相当于快排,使用sort函数有时候可能比我们自己写一个排序算法,可能效率更高. 2.使用sort函数排序 #include <iostream& ...
- C++中sort函数详解
原文链接点这 0.简介 sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序.sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数 ...
最新文章
- PTA 基础编程题目集 7-21 求特殊方程的正整数解 C语言
- 如何设计 QQ、微信、微博、Github 等第三方账号登陆 ?(附表设计)
- Redis实现分布式锁1
- mapgis明码文件转为点线面文件_手机上word文档可以转为pdf文件吗?
- github单独下载某个文件或文件夹
- Linux系统修改环境变量PATH路径
- c#自定义事件的使用方法
- 蓝桥杯 ALGO-94 算法训练 新生舞会
- 理解偏倚:可靠结果的先决条件
- c++与unreal 的uc脚本交互
- 修改DevExpress中英文提示,将英文改为中文
- 少样本学习系列(三)【Optimization-Based Methods】
- 桌面无法显示计算机,win10 桌面计算机无法显示
- 全军出击 iOS和Android,绝地求生全军出击安卓和ios能一起玩吗_绝地求生全军出击安卓ios数据互通吗_玩游戏网...
- Firefox浏览器无法安装firebug和firepath插件问题解决
- DCDC与LDO浅析
- 浅谈~区块链的现状与未来!
- 从中国封建历史的发展来理解云计算、雾计算、边缘计算以及云原生之间的关系
- PADS Logic电路原理pcb设计(线路硬件设计实践问题总结)
- python 机器学习(引言-莺尾花分类)
热门文章
- 企业微信调用发送应用消息接口返回错误代码301002
- “世界上体积最小的游乐园”——酒分之一的酒世界理想
- 计算机组成原理测试习题集3
- lisp和python_给 Lisp 程序员的 Python 简介
- 控制 html元素 显示/隐藏
- 倍福工控机twincat3备份
- 在unity向量空间内绘制几何(1):通过将极坐标转换为直角坐标,绘制阿基米德螺线,对数螺线与玫瑰线等几何图形
- 赵沁平院士:扎实推荐虚拟现实产业健康发展
- android 模拟器uuid,某APP 注册之uuid详解之从打开APP日志入手
- Android 主题Theme样式一键换肤,非常简单(附小案例)