【问题标题】:Order of operands in compare with std::map与 std::map 比较的操作数顺序
【发布时间】:2016-08-02 10:58:20
【问题描述】:

说我有:

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

如果我现在这样做

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

t 是否总是会出现在 operator&lt; 的左侧参数中,而 m 的元素会在右侧参数中与它进行比较(反之亦然)?

或者这个实现是否依赖于任何一种方式?

【问题讨论】:

    标签: c++ language-lawyer stdmap


    【解决方案1】:

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

    a = b

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

    模拟的

    不是 (a 。

    【讨论】:

      【解决方案2】:

      这两种方式都没有明确的保证,实际上您可以期望在比较的任一侧找到您的操作数,因为操作最终需要观察¬(A&lt;B) &amp;&amp; ¬(B&lt;A) 以确定AB 之间的相等性。

      让你的操作符尽可能抽象,这样它就无关紧要了。让它只考虑它接收到的两个参数的值,而不知道任何容器或查找操作。

      【讨论】:

        猜你喜欢
        • 2012-05-27
        • 1970-01-01
        • 2013-01-05
        • 2017-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多