我尝试使用此代码:

QPoint pt;
QHash<QPoint, double> hexes;
hexes.contains(pt);


我得到错误:

error: no matching function for call to ‘qHash(const QPoint&)’


但是,如果我将“ QPoint”替换为“ int”,则可以正常编译。可以将QPoint用作QHash密钥类型吗?

最佳答案

可以将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位哈希的正确哈希函数。

关于c++ - 无法将QPoint用作QHASH key ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24498993/

10-11 19:25