说我有:
bool operator<(Type const& lhs, Type const& rhs) { /* ... */ }
std::map<Type, void*> m;
如果我现在
Type t{};
m.find(t);
将t
始终放在operator<
的左侧参数中,并将m
的元素与右侧参数进行比较(反之亦然) ?
或者这种实现是否依赖,可以采用哪种方式?
答案 0 :(得分:7)
如果我没有弄错的话,可以证明有些情况下必须对双方进行评估。这是因为数学上的平等
a = b
(字典必须最终决定)通过
进行模拟不是(a&lt; b)而不是(b&lt; a)。
答案 1 :(得分:5)
无论如何都没有声明的保证,实际上你可以在比较的任何一方找到你的操作数,因为操作最终需要观察¬(A<B) && ¬(B<A)
来确定A
和B
之间的相等性。 User_ID Firstname Surname Company
1 Steve Jobs Apple
2 Bill Gates Microsoft
。
让您的运营商尽可能抽象,以便无关紧要。只考虑它接收的两个参数的值,不知道任何容器或查找操作。