首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在QMap中将QSet作为值使用?

如何在QMap中将QSet作为值使用?
EN

Stack Overflow用户
提问于 2015-10-20 13:07:24
回答 1查看 385关注 0票数 0

我正在使用Qt,我想声明以下容器:

代码语言:javascript
复制
QMap<QUrl , QSet<ClassSharedPtr> > map;

这里的ClassSharedPtr是类" class“的boost共享ptr。

代码语言:javascript
复制
typedef boost::shared_ptr<const Class> ClassPtr;

在添加头文件#include后,我收到以下错误:

代码语言:javascript
复制
error: no matching function for call to ‘qHash(const boost::shared_ptr<const Class>&)’
EN

回答 1

Stack Overflow用户

发布于 2015-10-20 17:14:36

QSet的value数据类型必须是可赋值的数据类型。此外,该类型必须提供operator==(),并且该类型的命名空间中还必须有一个qHash()函数,该函数返回values类型的参数的哈希值。

因此,您应该为boost::shared_ptr<const Class>实现qHash()函数。

代码语言:javascript
复制
namespace boost {

uint qHash(const boost::shared_ptr<const Class> &key, uint seed = 0)
{
    const Class *ptr = key.get();
    return uint(ptr) ^ seed;
}

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

https://stackoverflow.com/questions/33228402

复制
相关文章

相似问题

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