C++中重载小于号,通常是为了使用STL的算法。 举个最为简单的例子,排序。
std::sort排序是基于大小顺序的,基本类型之间就存在大小于的关系, 排序就是按照从小到大的顺序调整序列。
在结构体中,因为这个结构体类型是你自己定义的,计算机并不知道<是根据什么来比较大小的,如果你要这样用
node a,b;
a<b;
就得让计算机知道当 <左右两边是node类型的值的时候,是根据什么逻辑来返回值的,比如 1<3这个是根据实数的大小来返回真假。
重载运算符的格式如下:
bool operator 运算符 (const 结构体名称 b) const
{
return(什么时候这个运算符对结构体成立);
}
struct Edge // 存储边
{
int a, b, w;//w为边的权重
bool operator< (const Edge &W)const
{
return w < W.w;
}
}edges[M];
告诉计算机是根据边的权重的大小来返回真假的;
sort(edges, edges + m);
如果自定义的话就是这样:
bool cmp(Edge &a,Edge &b){
return a.w < b.w;
}
sort(edges,edges+m,cmp);
正常次序的重载:
struct node{
int w;
bool operator <(const node a)const{//记住!!!
return w<a.w;
}
}e[maxn];
priority_queue<node> q; //此时的优先队列是按结构体的w值,从大到小排列
sort(e,e+n);//按照结构体的w值,从小到大进行排序
相反次序的重载:
struct node{
int w;
bool operator <(const node a)const{
return a.w<w;//在这里改变一下位置即可
}
}e[maxn];
priority_queue<node> q; //此时的优先队列是按结构体的w值,从小到大排列
sort(e,e+n);//按照结构体的w值,从大到小进行排序
因篇幅问题不能全部显示,请点此查看更多更全内容