sort函数

C++ STL 标准库中的 sort() 函数,本质就是一个模板函数,位于头文件<algorithm>

该函数专门用来对容器或普通数组中指定范围内的元素进行排序,默认升序排序,除此之外我们也可以选择标准库的其它排序规则,或者自定义排序规则

  • 函数参数模版
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
// 按照指定的 comp 排序规则,对 [first, last) 区域内的元素进行排序
// firt: 起始位置,左闭;
// last: 结束为止,右开;
// comp: 排序规则(比较器),可以省略,默认升序。
  • 对数组升序排序:
#include<iostream>
#include<algorithm>
using namespace std;
main()
{//sort函数第三个参数采用默认从小到大int a[]={45,12,34,77,90,11,2,4,5,55};sort(a, a + 10);for(int i=0;i<10;i++) cout<<a[i]<<" ";
}
  • 自定义排序规则:
#include <iostream>
#include <algorithm>
using namespace std;bool ascend(int a, int b){return a < b;           // true时 a 在 b 前面,即升序
}
bool descend(int a, int b){return a > b;           // true时 a 在 b 前面,即降序
}
int main(){int nums[] = {1,3,2,6,5,4,8,7};sort(nums, nums + 8, ascend);   // 升序for(int i : nums) cout << i << " ";cout << endl;sort(nums, nums + 8, descend);  // 降序for(int i : nums) cout << i << " ";return 0;
}

对于int, double等基本数据类型,标准库已有现成的排序规则,如
equal_to<Type>()、not_equal_to<Type>()、greater<Type>()、greater_equal<Type>()、less<Type>()、less_equal<Type>()等可以直接调用。
升序:sort(begin, end, less<data-type>());
降序:sort(begin, end, greater.<data-type>());

  • 对vector进行排序
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;int main(){vector<int> vec = {1,2,6,8,4,1,0,3,-1};sort(vec.begin(), vec.end(), greater<int>());   // 升序for(int i : vec) cout << i << " ";cout << endl;sort(vec.begin(), vec.end(), less<int>());      // 降序for(int i : vec) cout << i << " ";return 0;
}
  • 需要传递其他变量的自定义排序写法(lambda函数):
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;int main(){vector<int> vec = {1,2,6,8,4,1,0,3,-1};int num = 1;sort(vec.begin(), vec.end(), [=](int a, int b){return abs(a-num) < abs(b-num);});   // 到 num 的距离升序排序for(int i : vec) cout << i << " ";  // 1 1 2 0 3 -1 4 6 8return 0;
}
  • 结构体二级排序(自定义排序规则)
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;struct student
{   string name;int math;int eng;
};bool comp(student a, student b){    // 先按数学成绩降序,再看英语成绩降序if(a.math == b.math) return a.eng > b.eng;return a.math > b.math;
}int main(){student students[] = {{"aa", 80, 90},     // cc 100 60{"bb", 90, 80},     // dd 90 100  {"cc", 100 ,60},    // bb 90 80{"dd", 90, 100}     // aa 80 90};sort(students, students + 4, comp);for(auto stu : students){cout << stu.name << " " << stu.math << " " << stu.eng << endl;}       return 0;
}
  • 结构体或类二级排序(内部重载<运算符)
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;struct student
{   string name;int math;int eng;// 重载 < 运算符, 默认a < b成立时a在b前面inline bool operator < (const student & anoter) const {if(math == anoter.math) return eng > anoter.eng;return math > anoter.math;  }
};int main(){student students[] = {{"aa", 80, 90},     // cc 100 60{"bb", 90, 80},     // dd 90 100  {"cc", 100 ,60},    // bb 90 80{"dd", 90, 100}     // aa 80 90};sort(students, students + 4);   // 默认a < b成立时a在b前面,则重载 < 运算符for(auto stu : students){cout << stu.name << " " << stu.math << " " << stu.eng << endl;}       return 0;
}

编译报错:invalid use of non-static member function
自定义sort时不正确使用非静态成员函数
关于类中重载sort函数的报错问题
类内sort自定义排序方法报错

C++ sort 函数相关推荐

  1. C++ algorithm的sort函数总结

    sort函数 sort对给定区间进行排序,支持各种数据类型,迭代器,结构体,自定义排序规则 stable_sort 对给定区间进行稳定排序,且可保证相等元素的原本相对次序在排序后保持不变 partia ...

  2. C中的qsort函数和C++中的sort函数的理解与使用

    一.qsort()函数 原型:_CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*)); ...

  3. C++ STL的sort 函数 以及自定义的比较函数

    没什么特别擅长的内容,先做个小笔记好了.在编程时,使用C++的标准模板库(STL)能节约工作量,增加代码的可读性,能灵活运用无疑会提高编程的效率,俗话说:Write less, create more ...

  4. 不可不知的STL sort函数实现原理

    sort函数一直以来被认为是快排,今天看到一篇文章,感觉自己知道的太少. 建议大家还是要去啃<STL源码剖析>,我也要去读了,先立个flag,后续1-2个月写STL源码剖析上得到的启发. ...

  5. python sort函数返回值_lambda函数与箭头函数在集合内置函数应用中的对照学习

    Python语言中有一个定义轻量级规则的lambda函数,其语法格式为: Lambda 参数列表:返回值表达式 简单的例子如:定义func=lambda x,y:x+y,则调用func(10,20)的 ...

  6. qsort函数和sort函数

      做ACM题的时候,排序是一种经常要用到的操作.如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错.STL里面有个sort函数,可以直接对数组排序 ...

  7. python sort函数时间复杂度_STL用法及其时间复杂度分析

    STL是C++语言中一个非常实用的代码库,叫做标准模板库,通常我们使用这个头文件即可导入STL.本文立足与C++,但是python其实也是大同小异. set set正如其名,表示的是一个集合,其分为两 ...

  8. sort函数pythonreverse_Python基础 7 ---- Python内置sort和sorted函数

    1 Python对数据的排序有两种方法,一种是容器内置的sort函数,另外一种利用sorted函数 2 对于sort函数我们不再进行讨论,只要研究一下sorted函数 3 sorted函数的原形sor ...

  9. python:数组/列表(remove()函数、append()函数、sort()函数、reverse()函数)

    排序: 1:整理顺序 #冒泡 lista = [5,7,11,19,99,63,3,9,1] list = [] while lista != []:number = 0for i in lista: ...

  10. STL sort()函数详解

    西方有句谚语:不要重复发明轮子! STL几乎封装了所有的数据结构中的算法,从链表到队列,从向量到堆栈,对hash到二叉树,从搜索到排序,从增加到删除......可以说,如果你理解了STL,你会发现你已 ...

最新文章

  1. 自学成才翁_如何发挥自学成才的内在游戏
  2. 蓝牙协议 HFP,HSP,A2DP等等
  3. oracle中sql语句的优化(转帖)
  4. Java系列笔记(4) - JVM监控与调优【转】
  5. 负载均衡—nginx实现waf
  6. matplot画图控制marker点的个数_专刊主编述评 中药质量标志物(Qmarker):提高中药质量标准及质量控制理论和促进中药产业科学发展...
  7. mirth connect 3.4 添加java到js代码中
  8. dw相对路径怎么改_了解 Dreamweaver 模板中的路径
  9. jdk版本问题导致的error: reference to query is ambiguous
  10. layui开关按钮及代码实现
  11. 怦然心动(Flipped)-5
  12. 分区字段VALUES LESS THAN时间格式及转换
  13. mysql 二进制分发版_安置MySQL二进制代码分发
  14. macOS 内核之 OS X 系统的起源
  15. 富文本wangEditor插件层级问题
  16. C# TreeView CheckBox 代码挑勾选中
  17. java实现图片转pdf文件
  18. 在javascript中使用纯函数处理副作用
  19. matlab中函数参数和变量作用域
  20. mstsc 后 不锁屏

热门文章

  1. php serialize w3c,serializeArray()
  2. max面部骨骼镜像脚本
  3. 网络攻防实验:aircrack-ng实验
  4. openstack之flavor管理
  5. 多点触控之MotionEvent.ACTION_MASK的作用
  6. 时间序列之指数平滑法(Exponential Smoothing)
  7. 数学规划模型(四):非线性规划模型
  8. 工作中遇到的一些问题
  9. java throwable_Java Throwable getLocalizedMessage()用法及代码示例
  10. 网易 2019 秋季校园招聘编程题真题集合