仅重载>运算符时,如何借助该运算符实现A < B的判断?
借助已重载的
>运算符实现<运算符的推导与简化 我在对复杂数据结构做运算符重载以实现排序时,已经完成了>运算符的重载(用于判断A > B),现在需要实现<运算符的判断逻辑,但要求只能借助已重载的>运算符。我自己推导了一串等式:
A < B = !(A > B) && !(A == B) = !(A > B) && !((A <= B) && (B <= A)) = !(A > B) && (!(A <= B) || !(B <= A)) = !(A > B) && ((A > B) || (B > A))
但不知道最后一行能不能简化,求解答。
简化结论与推导
其实可以直接简化为 A < B = B > A,完全不需要复杂的逻辑组合。
从比较运算符的基本语义来看,A < B的逻辑完全等价于B > A,这是比较关系的天然对称性。你之前的推导绕了不必要的弯路,根本不需要引入==或<=这类未定义的运算符——既然已经实现了X > Y的判断逻辑,那么判断A < B直接调用B > A即可。
如果要从你最后一步的式子推导简化:!(A > B) && ((A > B) || (B > A))
当!(A > B)成立时,(A > B)为false,因此(A > B) || (B > A)等价于B > A,整个式子就简化为!(A > B) && (B > A)。而如果你的数据结构的比较满足全序关系(任意两元素要么X>Y、要么X<Y、要么X==Y,无其他情况),那么当B > A成立时,!(A > B)必然为真,因此最终式子等价于B > A。
所以最简洁高效的实现,就是让<运算符直接返回B > A的结果。
内容的提问来源于stack exchange,提问作者Lim Meng Kiat
相关产品推荐
相关产品推荐

