文章目录
前言
随着不断深入学习,STL库的运用不断增加,如何更加灵活利用,重构运算符是一个不错的选择
一、重构运算符是什么?
C++和C一样有很多的操作符,如表示逻辑运算的&,|,~,!以及表示数字运算的+,-,*,/,++,–和表示判断的==,&&,||等等。但是在C中这些符号只能用于处理特定类型的数据,但是在C++中可以对部分的操作符重载。
二、常用一:优先队列priority_queue
1.结构体内部 重构运算符
代码如下(示例):
struct node{
int num;
int t;
friend bool operator<(const node &a1)const
{
return num>a1.num;
}
};
2.结构体外部 重构运算符
代码如下(示例):
bool operator<(const node &a1,const node &a2)
{
return a1.num>a2.num;
}
注意,重载运算符是对所有node类型生效,如果是int等原有类型则应该考虑对整体代码其他部分影响。
3.重构比较函数
struct cmp
{
bool operator() (const int& a1,const int &a2)
{
return a1>a2;
}
};
priority_queue<node, vector<node>, cmp > a;
三.常用二:sort排序
1.结构体内 重构运算符
struct node{
int num;
int t;
bool operator<(const node &a1)const
{
return num>a1.num;
}
};
跟优先队列相比,不用写友元friend
2.结构体外 重构运算符
bool operator<(const node &a1,const node &a2)
{
return a1.num>a2.num;
}
3.重构函数
bool cmp(const node &a1,const node &a2)
{
return a1.num>a2.num;
}
sort(b,b+3,cmp);
总结
重载运算符对众多STL库函数改写有着便利的作用,是改写函数or重载运算符实现目标,需要结合实际选取最优选择。
特别注意
改写一般只能改<,改>会出现错误。
对于改写<,只会对原来STL函数的结果做一次相反运算。如sort原来是递增,改后为递减;优先队列原来为递减,改后为递增。