总结一些比较函数(含有优先队列里结构体里的重载)

 

最近见的比较函数挺多的,然后就想汇总一下,记录下来,But,忘了好几个,先写一点,剩下的有机会见了补上

//适用于qsort
int cmp(const void *a ,const void *b)
{
	return *(int *)a - *(int *)b ;			//从小到大排序 
}

//sort

int cmp(const int a ,const int b)
{
    return  (b) <= (a); //从大到小排序
}

//优先队列里的结构体,   如果不是, 仅用于sort,则分别为从小到大, 从大到小 


struct _node {
    int p;      
    int no;    
    friend bool operator <(const _node &a,const _node &b) {
//从大到小
        if(a.p != b.p)
            return a.p < b.p;
//从小到大
        else
            return a.no > b.no;
    }
};

也可以将以上的改成如下所示: (将friend去掉后必须在后面加const,有friend则不需要,具体的。。。 也不太明白,等有时间了再弄

一、概念

  当const在函数名前面的时候修饰的是函数返回值,在函数名后面表示是常成员函数,该函数不能修改对象内的任何成员,只能发生读操作,不能发生写操作。

 

二、原理:

  我们都知道在调用成员函数的时候编译器会将对象自身的地址作为隐藏参数传递给函数,在const成员函数中,既不能改变this所指向的对象,也不能改变this所保存的地址,this的类型是一个指向const类型对象的const指针。

struct _node {
    int p;   
    int no;    
    bool operator <(const _node &b)const {//第一个是为了保护我们传的引用不被非法修改(传引用为了节约开销,一般的类可能比较复杂)
 //第二个const 是为了修饰 this 指针

    //从大到小
            if(p != b.p)
                return p < b.p;
    //从小到大
            else
                return no > b.no;
        }
};

 

//sort(a, a+n, cmp)   或者 vector 里的 sort(a.begin(), a.end(), cmp)

struct student {
    string number;
    string sex;
    int age;
    int score;
};
bool cmp(student a, student b) {
    if (a.score != b.score)//成绩从小大大排序
        return a.score < b.score;
    else if (a.sex != b.sex)
        return a.sex > b.sex;//男性优先
    else
        return a.number < b.number; //学号由小到大排序
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值