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

TFM*_*TFM 3 c++ stdmap language-lawyer

说我有:

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

如果我现在这样做

Type t{};
m.find(t);
Run Code Online (Sandbox Code Playgroud)

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

或者这种实现是否依赖,可以采用哪种方式?

Ami*_*ory 7

如果我没有弄错的话,可以证明在某些情况下必须对双方进行评估.这是因为数学上的平等

a = b

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

不是(a <b)而不是(b <a).


Lig*_*ica 5

无论如何都没有声明的保证,在实践中你可以期望在比较的任何一方找到你的操作数,因为操作最终需要观察¬(A<B) && ¬(B<A)以确定A和之间的相等性B.

让您的运营商尽可能抽象,这样无关紧要.使它只考虑它接收的两个参数的值,而不知道任何容器或查找操作.