首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QRect的qHash函数

QRect的qHash函数
EN

Stack Overflow用户
提问于 2010-11-08 09:25:16
回答 4查看 3.2K关注 0票数 3

计算QRectqHash值的最佳方法是什么?我需要使用QRect (也许还有QRectF)作为QCache的密钥。现在我使用的是这样的东西:

代码语言:javascript
复制
inline uint qHash(const QRect & r)
{
 return qHash(QByteArray::fromRawData((const char*)&r, sizeof(r)));
}

它似乎可以工作,但我不喜欢把它转换成一些原始的字节,因为QRect不是一个简单的结构,这可能迟早会在未来的Qt版本中崩溃。

顺便说一句。我不存储散列值,所以它不需要持久化或跨平台。但它确实需要可靠和快速。

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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/ (阅读评论)

票数 3
EN

Stack Overflow用户

发布于 2010-11-08 09:48:31

好吧,这样如何:

代码语言:javascript
复制
inline uint qHash(const QRect & r)
{
    return qHash(r.left()) + qHash(r.top()) + qHash(r.width()) + qHash(r.bottom());
}  
票数 1
EN

Stack Overflow用户

发布于 2011-07-21 22:31:05

简单地XORing每个整数怎么样?据我所知,qHash(QPair<..>)可以做到这一点(使用已经计算出的这两个项的qHashes )。

代码语言:javascript
复制
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也是如此:

代码语言:javascript
复制
inline uint qHash(const QRectF & r)
{
    return qHash(r.left()) ^ qHash(r.top()) ^
           qHash(r.right()) ^ qHash(r.bottom());
}

(请注意,即使向下舍入到整数,也不意味着缓存将不能正常工作-只是哈希表有点“作弊”。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4120675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档