C++重载运算符==和<之间的区别

thi*_*goh 2 c++ operator-overloading

任何人都可以解释一下重载==<?之间有什么区别?

例如,如果我使用地图:

map<Type, int> a();

friend bool operator<(const Type& lhs, const Type& rhs);

friend bool operator==(const Type& lhs, const Type& rhs);
Run Code Online (Sandbox Code Playgroud)

当我打电话时,我实现了两个操作符:

a.find(value);
Run Code Online (Sandbox Code Playgroud)

==正在调用运算符函数?我想不是.我调试并看到它<被调用,但为什么?应该是运算符函数的行为是<什么?

我来自Java,equals调用该方法,并且理解行为非常简单.

谢谢.

Jam*_*nze 7

operator==使==操作员超载(而不是其他); operator< 使<操作员超载(而不是其他).

std::map被定义为默认使用std::less(并且仅std::less),并且std::less被定义为<默认使用.但是,一般情况下,我建议不要重载,operator<除非有序比较对你的类有意义,在这种情况下,你应该以连贯的方式重载所有六个比较运算符.否则,您可以指定比较功能类型作为附加模板参数std::map; 比较功能对象应该定义严格的弱排序关系.如果类型被设计为用作键,但排序仍然纯粹是任意的,您可能会专门化std::less.

至于Java,没有运算符重载,显然不能使用<; 默认情况下,SortedMap(在Java相当于std::map)要求的钥匙是可比,但是,这又需要一个compare 函数,该函数返回一个值<,==>0,这取决于是否 this<,==>比其他.我承认我觉得这更合乎逻辑,但差别非常非常小.(C++决策背后的基本原理是内置类型类似intdouble可以用作键.在Java中,你必须将它们包装起来.)