我尝试使用以下代码:
QPoint pt;
QHash<QPoint, double> hexes;
hexes.contains(pt);
然后我得到了错误:
error: no matching function for call to ‘qHash(const QPoint&)’
但如果我将'QPoint‘替换为'int’,它就能正常编译。是否可以将QPoint用作QHash密钥类型?
发布于 2016-02-15 19:27:26
没有为QPoint
定义qHash
散列函数,但是可以使用QPair<int,int>
编写一个散列函数
inline uint qHash (const QPoint & key)
{
return qHash (QPair<int,int>(key.x(), key.y()) );
}
发布于 2014-07-01 05:22:01
是否可以将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位散列。
https://stackoverflow.com/questions/24498993
复制相似问题