首页 > 编程语言 >C++ sort

C++ sort

时间:2022-12-13 21:45:33浏览次数:46  
标签:sort __ const greater C++ 排序 first

sort是C++ STL(Standard template library)提供的排序函数,它可以为普通函数或者容器中指定范围内的元素进行排序。默认为升序排序,排序的区间左闭右开

使用标准库(STL)提供的比较规则

    vector<int> a(n);
    //....
    sort(a.begin(), a.end(), less<int>());//从小到大
    sort(a.begin(), a.end(), greater<int>());//从大到小

lessgreater的意思是两个要比较的元素中,第一个元素是否比第二个元素更小(less)或更大(greater)。
lessgreater实际上是模板结构体,即sort的第三个参数可以是类对象。

template<typename _Tp>
    struct less : public binary_function<_Tp, _Tp, bool>
    {
      _GLIBCXX14_CONSTEXPR
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x < __y; }
    };

template<typename _Tp>
    struct greater : public binary_function<_Tp, _Tp, bool>
    {
      _GLIBCXX14_CONSTEXPR
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x > __y; }
    };

自定义比较规则

自定义比较规则多用函数实现

  const bool mycmp(int a, int b)
{
    return a < b;//升序
}

  sort(a.begin(), a.end(), mycmp);

当然也可以仿照上面的规则使用结构体或类对象作为sort的第三个参数。

sort排序pair

pair有自带的排序规则,其默认对first升序,当first相同时对second升序;
我们可以增加第三个参数来改变排序规则

   vector<pair<int, char>> b(n);
   sort(b.begin(), b.end(), greater<pair<int, char>>());//从大到小

   const bool mycmp(const pair<int, char> a, const pair<int, char> b)
{
    return a.first != b.first ? a.first < b.first : a.second > b.second;
}
    sort(b.begin(), b.end(), mycmp);

标签:sort,__,const,greater,C++,排序,first
From: https://www.cnblogs.com/hetailang/p/16980726.html

相关文章

  • C++ 捕获程序异常奔溃minidump
    文章目录​​1、简介​​​​1.1MiniDumpWriteDump函数​​​​1.2VisualStudio分析小型转储​​​​1.3使用Microsoft公共符号服务器​​​​1.4使用WinDbg调试小......
  • ASCII码对照表(C++17 实现ANSI、UTF8、Unicode字符编码互转)
    文章目录​​1、简介​​​​1.1ANSI​​​​1.2Unicode​​​​1.3UTF8​​​​1.4Littleendian/Bigendian​​​​2、C++标准库​​​​2.1MultiByteToWideChar......
  • C++ OpenSSL库编译及使用(VS2017,Python)
    文章目录​​1、简介​​​​2、下载openssl​​​​2.1下载openssl源码(github)​​​​2.2下载openssl源码(官网压缩包)​​​​2.3下载openssl二进制库​​​​2.4下载pe......
  • C++17 实现日期和时间相关编程
    文章目录​​1、简介​​​​1.1GMT​​​​1.2UT​​​​1.3CST​​​​1.4ISO​​​​1.5UTC​​​​1.6Unix时间戳​​​​2、C++语言的时间函数​​​​2.1获取......
  • 【GIS开发】Esri Shapefile(.shp)矢量数据文件读取(C++、Python)
    文章目录​​1、简介​​​​1.1什么是Shapefile​​​​1.2格式分析​​​​1.3资源下载​​​​2、C++​​​​2.1shapelib​​​​2.2gdal​​​​3、Python​​​......
  • c++中的构造函数,拷贝构造函数和赋值函数
    1、拷贝构造和赋值函数的区别:1)拷贝构造函数是一个对象初始化一块内存区域,这块内存就是新对象的内存区,而赋值函数是对于一个已经被初始化的对象来进行赋值操作。2)一般来说......
  • 堆排序heapSort_legend
    堆排序:(一)定义:从小到大排序则构建一个最大堆;从大到小排序,则构建一个最小堆。(二)思想:1.先建立一个最大堆;2.然后将最大堆的堆顶元素(0号元素,最大值)与堆的最后一个元素(n-1号......
  • C++有关class内部的static关键字理解
    变量在class中被static修饰的成员变量是可以被直接访问的,不需要实例化。并且所有实例共享同一份该变量,进而可实现单例模式。如果换个理解方式,class仅提供一个namespace......
  • 今天无聊弄得C++
    //chp2.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include<stdlib.h>#include<string.h>#include<time.h>#include<math.h>//数据结构//数组(Array)、......
  • c++11 线程池--鸿蒙OS
    一个你应该学习的线程池说明原理:线程+优先级队列.源码没有涉及STL,没有复杂高深的语法,安全性做得很好:queue的安全使用方式top和pop以及empty的判断都是使用了std::......