我尝试使用此代码:
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/