Qt C++运算符 == 重载 Qlist 未调用
Qt C++ operator == overload Qlist not called
当我使用 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
才能正常工作。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 通过QLIST迭代并在包含对象上调用函数
- QList::p ush_back() 的糟糕调用
- Qt C++运算符 == 重载 Qlist 未调用
- 如何调用模板化函数的非专用版本 QList::operator<<
- QList析构函数行为-对列表中的指针调用delete/free()
- 使用 QList<MyObject* 调用 setContextProperty(>
- QList clear函数调用是否清除存储在QList中的动态分配对象的内存?