Qt C ++ operator ==重载Qlist未调用

时间:2016-01-18 14:59:18

标签: c++ qt

当我使用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); 

我无法获得价值或比较地图中是否存在节点,因为未调用operator == !!

如果你能提供帮助,我会贬低它。

2 个答案:

答案 0 :(得分:4)

这是expected behaviour。您使用public class EntityPOCO { public int Id { get; set; } public static OnModelCreating(DbModelBuilder builder) { builder.HasKey<EntityPOCO>(x => x.Id); } } ... public class EntityContext : DbContext { public DbSet<EntityPOCO> EntityPOCOs { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); EntityPOCO.OnModelCreating(modelBuilder); } } 作为密钥类型,但未定义特殊Node*

您似乎打算operator==(Node*,Node*)

答案 1 :(得分:0)

哈希键是指针(Node*)而不是Node对象。所以map或hash正在比较那里的指针。因此,您的operator==确实没有必要。

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

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

QHash<Node, double> //[1]

或只使用指针并将比较保留为指针比较。

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