与 std::map 比较的操作数顺序

Order of operands in compare with std::map

假设我有:

bool operator<(Type const& lhs, Type const& rhs) { /* ... */ }
std::map<Type, void*> m;

如果我现在做

Type t{};
m.find(t);

t 总是在 operator< 的左侧参数中结束,并且 m 的元素在右侧参数中与之进行比较(反之亦然)反过来)?

或者这个实现是依赖的并且可以采用任何一种方式?

如果我没记错的话,可以证明存在必须两面都评估的情况。这是因为数学等式

a = b

(字典最终必须决定)是通过

模拟的

不是 (a < b) 也不是 (b < a)

这两种方式都没有明确的保证,在实践中你可以期望在比较的两边找到你的操作数,因为操作最终需要观察 ¬(A<B) && ¬(B<A) 来确定 [=11= 之间的相等性] 和 B.

使您的运算符尽可能抽象,这样就没有关系了。让它只考虑它接收到的两个参数的值,而不考虑任何容器或查找操作。