当我使用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 == !!
如果你能提供帮助,我会贬低它。
答案 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
提供哈希函数才能正常工作。