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

时间:2016-08-02 10:58:20

标签: c++ language-lawyer stdmap

说我有:

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

如果我现在

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

t始终放在operator<的左侧参数中,并将m的元素与右侧参数进行比较(反之亦然) ?

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

2 个答案:

答案 0 :(得分:7)

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

a = b

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

进行模拟

不是(a&lt; b)而不是(b&lt; a)

答案 1 :(得分:5)

无论如何都没有声明的保证,实际上你可以在比较的任何一方找到你的操作数,因为操作最终需要观察¬(A<B) && ¬(B<A)来确定AB之间的相等性。 User_ID Firstname Surname Company 1 Steve Jobs Apple 2 Bill Gates Microsoft

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