• sort函数


    以前一直用,但是当用到降序的时候,对于他的cmp函数还是不熟练,今天特意总结了一下。

    sort(a,a+n,cmp);

    1.sort函数式c++里面STL库函数,要调头文件#include<algorithm>(注意:C++里面的头文件不带.H,不然提示的错误会让你崩溃,范过两次错误,C小白同学在调用STL时要注意)

    2.sort和c里面的qsort 默认的都是升序排序,当我们需要安排降序 或者 在 结构体里面按照某一个变量排序时就要手写 cmp 函数

    3.cmp函数返回的是bool型或者真假值1/0就行,例如:

    int cmp( const int &a, const int &b ){
        if( a > b )
           return 1;
        else
           return 0;
    }

    ****很多人对const不太熟悉,其实他是c++里面的常数,大概作用如下:
      (1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;
      (2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;
      (3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;
      (4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;
      (5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。例如:
        const classA operator*(const classA& a1, const classA& a2);
          operator*的返回结果必须是一个 const 对象。如果不是,这样的变态代码也不会编译出错;

    ***** 

    这里的理解:你可以返回真假,也可以返回a>b或者a<b之类,返回写bool或者int都行,当然写返回 1/0时要用int,但是int时也可以a>b,如下:

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    bool cmp(const int &a,const int &b)
    {
        return a>b;
    }
    
    void main()
    {
        int a[5]={3,2,1,4};
        sort(a,a+4,cmp);
        for(int i=0;i<4;++i)
            printf("%d  ",a[i]);
    }

    诀窍:这个升还是降,关键就是谁大于谁,我们需要降序,则要想前面大于后面,故要写成a>b,想返回真假,则当a>b时返回真

    4.结构体时,将你想要比较的变量参加比较久行啦

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    struct data
    {
        int x;
        int y;
    }a[3];
    bool cmp1(const struct data &m,const struct data &n) //cmp的类型为bool型
    {
        return m.x < n.x;       //升序 与qsort不同
    }
    bool cmp2(const struct data &m,const struct data &n)
    {
        return m.x > n.x;        //降序
    }
    bool cmp3( const struct data &m,const struct data &n)
    {
        if(m.x < n.x)            //先按 x 升序,若 x 相等,按 y 升序排
            return 1;
        else
        {
            if(m.x > m.y)
                return 0;
            else
            {
                if(m.x == m.y)
                    return m.y < m.y;
            }
        }
    }
    int main()
    {
        scanf("%d%d%d%d%d%d",&a[0].x,&a[0].y,&a[1].x,&a[1].y,&a[2].x,&a[2].y);
        sort(a,a+3,cmp1);
        sort(a,a+3,cmp2);
        sort(a,a+3,cmp3);
        return 0;
    }


    额 ,先总结这么多吧

  • 相关阅读:
    [转] css选择器中:first-child与:first-of-type的区别
    [转] Javascript中理解发布--订阅模式
    [转] 浅析JavaScript设计模式——发布-订阅/观察者模式
    [转] linux学习第四十四篇:Nginx安装,Nginx默认虚拟主机,Nginx域名重定向
    [转] meta标签的作用及整理
    [转] 安装npm全局包提示权限不够
    [转] UniCode编码表
    Unicode字符编码表
    [转] Lodash常用API笔记
    [转] JavaScript 之 ArrayBuffer
  • 原文地址:https://www.cnblogs.com/zibuyu/p/3045360.html
Copyright © 2020-2023  润新知