xiaozhangma @ 2023-11-16 15:48:07
题解里都是这样写的:
struct Info{
int dis;
int pos;
bool operator <(const Info &x)const{
return x.dis < dis;
}
};
蓝书上则是这样:
struct Info{
int dis;
int pos;
};
bool operator <(const Info &x, const Info &y){
return x.dis < y.dis;
}
但用蓝书上的写法会出错:(
by Imiya @ 2023-11-16 16:04:18
@xiaozhangma 第二个 const
是针对 this
。也就是说加了这个 const
,你不能在函数里面修改 dis,pos
。比如这样会报错:
struct Info{
int dis;
int pos;
bool operator <(const Info &x)const{
dis=0;
return x.dis < dis;
}
};
by xiaozhangma @ 2023-11-16 16:05:48
@Imiya this是什么?
by xiaozhangma @ 2023-11-16 16:08:21
@Imiya 能不能解释一下第二种写法“>”反而得到的是小根堆,蓝书上写的是“<”
by Miss_SGT @ 2023-11-16 16:10:45
pair是个好东西
by Imiya @ 2023-11-16 16:13:02
@xiaozhangma 把二元运算符重载写在里面则括号里声明的是第二个(右边的)元素,左边的元素可以直接调用里面的东西把前缀省了。所以第二种写法里的 x.dis
等价于第一种写法的 dis
,第二种写法的 y.dis
等价于第一种写法的 x.dis
by LG_kemeng @ 2023-11-16 16:14:36
@xiaozhangma this是当前struct内的元素。
比如第一种可以写作:
struct Info{
int dis,pos;
inline bool operator<(const Info x)const
{
return x.dis<this.dis;
}
}
然后两个排序方式不一样。第一种显然让x的dis要<当前值,也就是说这是按dis从大到小排序的。底下的写法是按dis从小到大排序的
by LG_kemeng @ 2023-11-16 16:17:00
@xiaozhangma 第一种写法等价于:
return dis>x.dis;
等价于:
inline bool cmp(register Info x,register Info y)
{return x.dis>y.dis;}
by xiaozhangma @ 2023-11-16 16:38:07
@LG_kemeng @Imiya 感谢