社区讨论
关于cmp函数
P3769[CH弱省胡策R2] TATT参与者 4已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mhjadv49
- 此快照首次捕获于
- 2025/11/03 23:20 4 个月前
- 此快照最后确认于
- 2025/11/03 23:20 4 个月前
如果你的cmp函数是这么写的:
CPPinline 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就可以过。其实把
CPPcmp函数多判几维,这样就不会出现相等元素情况了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 条回复,欢迎继续交流。
正在加载回复...