发生了啥?

在做leetcode 每日一题最大数的过程中,自定义了一个如下的比较函数用于sort排序:

1
2
3
4
5
bool cmp(const int a, const int b){
string sa = to_string(a);
string sb = to_string(b);
return sa+sb>=sb+sa;
}

然后愉快地报错了(可以尝试输入多个0,不过该问题在只有比较少0的时候不会出现)。

解决办法是将上面比较函数中的大于等于改为大于。

为什么?

遇事不决,先问StackOverflow,果不其然,遇到了一个有相似问题的大哥,得到了如下的解答:

image-20210412124940043

啊,原来这么简单!

点进compare requirement,可以看到cpp对于custome cmp的要求:

image-20210412125113182

简单说来,就是满足自反性、反对称性以及传递性。

总结

一个小小的细节,可能平时不太会犯这样的错误,不过还是十分值得注意的!