Qt C++运算符 == 重载 Qlist 未调用

Qt C++ operator == overload Qlist not called

本文关键字:调用 Qlist 重载 运算符 Qt C++      更新时间:2023-10-16

当我使用 QList 或 QHashMap 时,我的运算符 == 没有被调用

这是我的代码:

class Node
{
    QString     _state;
    Node*       _parent;
    // for ID generation purpose
    static int  _seqNumber;
    int         _id;
public:
    Node();
    inline bool operator== (const Node &node) const
    {
         return ( _id == node._id  );
    }
 }

现在,如果我使用QHash例如:

    QHash<Node*, double> hashMap* = new QHash<Node*, double>();
    Node* node = new Node();
    hashMap->insert(node, 500);
    // value is never found, because operator== is not being called
    double value = hashMap->value(node); 

我无法获取值或比较映射中存在节点,因为运算符==没有被调用!

如果你能帮忙,我会很感激。

这是

预期行为。您使用Node*作为密钥类型,但没有定义特殊operator==(Node*,Node*)

你似乎打算Node.

哈希键是一个指针( Node* ) 而不是一个Node对象。 所以地图或哈希正在比较那里的指针。因此,真的没有必要operator==.

而且你不能要求编译器使用你的函数来比较两个指针。 因为指针是基元类型,就像int一样。 您不能重载operator==来比较两个int

所以,我认为解决方案可能是将您的对象用作哈希键,如下所示:

QHash<Node, double> //[1]

或者只使用指针并将比较留给指针比较。

[1] 但是,你必须提供一个哈希函数,QHash才能正常工作。