不能使用QPoint作为QHASH密钥

时间:2014-06-30 21:09:49

标签: c++ qt qt4 qt5

我尝试使用此代码:

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密钥类型?

2 个答案:

答案 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()) );
}