重载运算符初识

废话不多少,直接上内容!

struct  node{
    string name;
    int price;
    friend bool operator < (node a, node b){
        return a.price>b.price;
    }
};

这个时候你可能会问:


   friend bool operator < (node a, node b){
        return a.price>b.price;
    }

这句话是什么功能呢?

参考《算法笔记》这本书:friend为友元(我觉得目前没必要知道,万事找百度哦!)

 bool operator < (node a, node b)即对node类型(此处是结构体类型)的操作符 < 进行重载,(重载 > 会编译错误)

return a.price>b.price;是重载之后 < 的作用。

举几个栗子

1、优先队列(struct类型)<的重载

struct  node{
    string name;
    int price;
    friend bool operator < (node a, node b){
        return a.price>b.price;
    }
};
int main()
{
    priority_queue<node> q;
     一些赋值操作;
}

我们都知道,优先队列内部是自动按照从大到小的顺序排列的,重载<之后,作用与原来相反,所以此时重载之后的优先队列内是按照price从小到大排列的,需要特别注意一下!

2、普通结构体内排序,省时

struct  node{
    string name;
    int price;
    friend bool operator < (node a, node b){
        return a.price>b.price;
    }
}a[maxn];
sort(a,a+maxn);

sort(a,a+maxn)默认是按照从小到大的顺序排列的,但是由于在结构体内重载了 < ,所以此时sort是按照从大到小的顺序排列的。此外还有另一种写法:

struct  node{
    string name;
    int price;
}a[maxn];
bool cmp(node a,node b)
{
    return a.price>b.price;
}
sort(a,a+maxn,cmp);

 但是这么写的话有一个缺点,在一些数据范围非常大的算法题目中,这么写有可能会超时,所以更好的写法是在结构体内重载,而不是在写一个cmp函数,要慢慢养成这样写的好习惯。

另外还有一种写法:

struct node{
    double num;
    int pos;
    bool operator <(const node& b)const
    {
        return num>b.num;
    }//如果再单独写一个cmp会超时
}c[maxn]

之前提到friend是友元,那这种写法就是成员了。

目前认识浅显,推荐大佬的博客,可以有更深入详细的学习。其中也包括其他运算符的重载。

https://www.cnblogs.com/ECJTUACM-873284962/p/6771262.html

猜你喜欢

转载自blog.csdn.net/Cassie_zkq/article/details/81457799