我尝试使用此代码:
QPoint pt;
QHash<QPoint, double> hexes;
hexes.contains(pt);
我收到错误:
error: no matching function for call to ‘qHash(const QPoint&)’
但如果我更换了QPoint&#39;与&#39; int&#39;它编译得很好。是否可以将QPoint用作QHash密钥类型?
答案 0 :(得分:2)
是否可以将QPoint用作QHash密钥类型?
根据documentation它可能。但是你需要定义:
inline uint qHash (const QPoint & key)
同样QHash
要求:
inline bool operator== (const QPoint & k1, const QPoint & k2)
但它已经定义了。
由于qHash
已经针对64位整数实现,我相信这个解决方案很有意义:
inline uint qHash (const QPoint & key)
{
return qHash (static_cast <qint64> (key.x () ) << 32 | key.y () );
}
注意:我不知道如何实现基于两个32位数字并输出32位哈希的正确哈希函数。
答案 1 :(得分:2)
qHash
未定义QPoint
哈希函数,但您可以使用QPair<int,int>
inline uint qHash (const QPoint & key)
{
return qHash (QPair<int,int>(key.x(), key.y()) );
}