计算QRect的qHash值的最佳方法是什么?我需要使用QRect (也许还有QRectF)作为QCache的密钥。现在我使用的是这样的东西:
inline uint qHash(const QRect & r)
{
return qHash(QByteArray::fromRawData((const char*)&r, sizeof(r)));
}它似乎可以工作,但我不喜欢把它转换成一些原始的字节,因为QRect不是一个简单的结构,这可能迟早会在未来的Qt版本中崩溃。
顺便说一句。我不存储散列值,所以它不需要持久化或跨平台。但它确实需要可靠和快速。
谢谢。
发布于 2010-11-08 19:12:17
我会简单地做return qHash(QString("%1,%2,%3,%4").arg(r.x()).arg(r.y()).arg(r.width()).arg(r.height())))
我也找到了这个解决方案:http://thesmithfam.org/blog/2008/01/17/using-qrect-with-qhash/ (阅读评论)
发布于 2010-11-08 09:48:31
好吧,这样如何:
inline uint qHash(const QRect & r)
{
return qHash(r.left()) + qHash(r.top()) + qHash(r.width()) + qHash(r.bottom());
} 发布于 2011-07-21 22:31:05
简单地XORing每个整数怎么样?据我所知,qHash(QPair<..>)可以做到这一点(使用已经计算出的这两个项的qHashes )。
inline uint qHash(const QRect & r)
{
return qHash(r.left() ^ r.top() ^ r.right() ^ r.bottom());
// or
return qHash(r.left()) ^ qHash(r.top()) ^
qHash(r.right()) ^ qHash(r.bottom());
}QRectF也是如此:
inline uint qHash(const QRectF & r)
{
return qHash(r.left()) ^ qHash(r.top()) ^
qHash(r.right()) ^ qHash(r.bottom());
}(请注意,即使向下舍入到整数,也不意味着缓存将不能正常工作-只是哈希表有点“作弊”。)
https://stackoverflow.com/questions/4120675
复制相似问题