函数声明

  1. template< class RandomIt, class Compare >
  2. constexpr void sort( RandomIt first, RandomIt last, Compare comp );

以一定排序规则排序指定范围内的元素,但是算法不具有稳定性,如果元素的值是相同的话不保证它们的相对顺序保持不变。

参数说明

first , last - 要排序的元素范围。

comp - 比较的函数,这里要满足compare的要求,如下:

总结下来一句话:就是在compare(int a ,int b)中,如果你想要从小到大排列,那么你需要的是 return a<b;(这里很简单,如果记不住的话,先随便按照一个方向写,最后发现反了的话改下大小于符号就行)

时间复杂度

平均 O(N·log(N)) 次比较,其中 N = std::distance(first, last) 。

我们需要注意的是sort()采用的是优化版本的快速排序,在最后阶段采用直接插入排序。因此时间复杂度为O(N·log(N))

举例说明

  1. #include <algorithm>
  2. #include <functional>
  3. #include <array>
  4. #include <iostream>
  5. int main()
  6. {
  7. std::array<int, 10> s = {5, 7, 4, 2, 8, 6, 1, 9, 0, 3};
  8. // 用默认的 operator< 排序
  9. std::sort(s.begin(), s.end());
  10. for (auto a : s) {
  11. std::cout << a << " ";
  12. }
  13. std::cout << '\n';
  14. // 用标准库比较函数对象排序
  15. std::sort(s.begin(), s.end(), std::greater<int>());
  16. for (auto a : s) {
  17. std::cout << a << " ";
  18. }
  19. std::cout << '\n';
  20. // 用自定义函数对象排序
  21. struct {
  22. bool operator()(int a, int b) const
  23. {
  24. return a < b;
  25. }
  26. } customLess;
  27. std::sort(s.begin(), s.end(), customLess);
  28. for (auto a : s) {
  29. std::cout << a << " ";
  30. }
  31. std::cout << '\n';
  32. // 用 lambda 表达式排序
  33. std::sort(s.begin(), s.end(), [](int a, int b) {
  34. return b < a;
  35. });
  36. for (auto a : s) {
  37. std::cout << a << " ";
  38. }
  39. std::cout << '\n';
  40. }

[C++]std::sort()函数使用总结的更多相关文章

  1. qsort函数、sort函数【转】

    http://blog.163.com/yuhua_kui/blog/static/9679964420142195442766/ 先说明一下:qsort和sort,只能对连续内存的数据进行排序,像链 ...

  2. qsort函数、sort函数 (精心整理篇)

    先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有 ...

  3. qsort函数、sort函数

    先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有 ...

  4. 一个std::sort 自定义比较排序函数 crash的分析过程

    两年未写总结博客,今天先来练练手,总结最近遇到的一个crash case. 注意:以下的分析都基于GCC4.4.6 一.解决crash 我们有一个复杂的排序,涉及到很多个因子,使用自定义排序函数的st ...

  5. 源码阅读笔记 - 1 MSVC2015中的std::sort

    大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格 ...

  6. C++ sort函数

    (一)为什么要用c++标准库里的排序函数 Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于 ...

  7. 使用STL库sort函数对vector进行排序

    使用STL库sort函数对vector进行排序,vector的内容为对象的指针,而不是对象. 代码如下 #include <stdio.h> #include <vector> ...

  8. C++ algorithm 里的sort函数应用

    MSDN中的定义: template<class RanIt>    void sort(RanIt first, RanIt last); //--> 1)template< ...

  9. c++ std::sort函数调用经常出现的invalidate operator<错误原因以及解决方法

    在c++编程中使用sort函数,自定义一个数据结构并进行排序时新手经常会碰到这种错误. 这是为什么呢?原因在于什么?如何解决? 看下面一个例子: int main(int, char*[]) { st ...

  10. sort函数CCF

    题是比较水的啦,但是好久没有用sort函数啦,有点生疏^...^ #include<stdio.h> #include<string.h> #include<iostre ...

随机推荐

  1. HTML基础知识(1)常用标签的使用 h、p、img、meta、a、iframe...

    文章目录 1.html简介 2.html注释 3.标签的属性 3.1 代码 3.2 测试结果 4.常用的标签 4.1 代码 4.2 测试结果 5.实体 5.1 代码 5.2 测试结果 6.图片引入 6 ...

  2. C# 6.0 添加和增强的功能【基础篇】

    C# 6.0 是在 visual studio 2015 中引入的.此版本更多关注了语法的改进,让代码更简洁且更具可读性,使编程更有效率,而不是和前几个版本一样增加主导性的功能. 一.静态导入 我们都 ...

  3. 【日志系统】Loki日志监控 - 入门初体验

    使用Grafana+Loki+Promtail入门级部署分布式日志系统(windows环境) 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放 ...

  4. vulnhub靶场之CORROSION: 2

    准备: 攻击机:虚拟机kali.本机win10. 靶机:CORROSION: 2,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnhub.com ...

  5. nginx安装及相关操作

    工作中经常用到nginx,今天写个自动部署nginx的脚本.nginx版本选用:1.20.2 1.创建nginx安装脚本(nginx.sh) [root@iZ2ze7uphtapcv51egcm7rZ ...

  6. 【题解】CF1659E AND-MEX Walk

    题目传送门 位运算 设题目中序列 \(w_1,w_1 \& w_2,w_1 \& w_2 \& w_3,\dots,w_1 \& w_2 \& \dots \& ...

  7. C#使用不安全指针来操作bitmap

    C#允许通过不安全指针实现像C++一样操作指针,这个速度是最快的.下面这个例子是修改一幅RGB图像的每个像素值,速度很快,测试一张2592*1944的彩色图像,只需要几ms就能够全部遍历. /// & ...

  8. 小程序基础之引用vant组件库

    第一步:终端npm init -y 会生成一个pack.json文件.(初始化包管理,记录这个项目用的包.) 第二步:npm install 会生成一个 package-lock.json文件.(一个 ...

  9. Conda 环境移植 (两种方式)

    ------------------------方法一------------------------ 优点: 在原机器上需要进行的操作较少,且除了conda不需要其余的库来支撑:需要传输的文件小,操 ...

  10. 深度学习之logistics回归

    在开始之前,事先声明本文参考[中文][吴恩达课后编程作业]Course 1 - 神经网络和深度学习 - 第二周作业_何宽的博客-CSDN博客_吴恩达课后编程作业 加上自己的理解,希望可以不用重复看吴恩 ...