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;
}


额 ,先总结这么多吧

posted @ 2013-04-26 17:44  煮人为乐  阅读(383)  评论(0编辑  收藏  举报