今天看到一段代码,map的key是自定义类型即struct类型,简化后的定义如下

其中只重载了小于符号,没有重载等于符号。重载小于非常容易理解,因为map底层是红黑树结构,所以必须规定大小顺序。
类型为map<test,int>的变量m,可以调用m.find(param)函数,成功返回。为什么没有重载等于符号也可以比较,我非常不理解,怀疑是编译器默认提供了重载等于运算符。
之后通过阅读源代码了解到,map.find只需要重载小于运算符,不需要重载等于运算符。原理是如果满足!a<b&&!b<a那么a==b,并且find函数就是利用的这个原理。
网友评论