社区讨论

关于cmp函数

P3769[CH弱省胡策R2] TATT参与者 4已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mhjadv49
此快照首次捕获于
2025/11/03 23:20
4 个月前
此快照最后确认于
2025/11/03 23:20
4 个月前
查看原帖
如果你的cmp函数是这么写的:
CPP
inline bool cmp1(node x,node y){return x.a==y.a?(x.b==y.b?(x.c==y.c?x.d<y.d:x.c<y.c):x.b<y.b):x.a<y.a;}
inline bool cmp2(node x,node y){return x.b==y.b?(x.c==y.c?x.d<y.d:x.c<y.c):x.b<y.b;}
inline bool cmp3(node x,node y){return x.c==y.c?x.d<y.d:x.c<y.c;}
当用cmp2或者cmp3 进行排序时,可能会出现比较的两个元素相等的情况,又因为sort 库函数是不稳定排序,这样相等元素的顺序就会乱掉。
所以有些代码把sort改成stable_sort就可以过。
其实把cmp函数多判几维,这样就不会出现相等元素情况了
CPP
inline bool cmp1(node x,node y){return x.a==y.a?(x.b==y.b?(x.c==y.c?x.d<y.d:x.c<y.c):x.b<y.b):x.a<y.a;}
inline bool cmp2(node x,node y){return x.b==y.b?(x.c==y.c?(x.d==y.d?x.a<y.a:x.d<y.d):x.c<y.c):x.b<y.b;}
inline bool cmp3(node x,node y){return x.c==y.c?(x.d==y.d?(x.a==y.a?x.b<y.b:x.a<y.a):x.d<y.d):x.c<y.c;}

回复

3 条回复,欢迎继续交流。

正在加载回复...