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

时间:2015-10-20 05:07:24

标签: qt qtwebkit qmap qset

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

QMap<QUrl , QSet<ClassSharedPtr> > map;

这里ClassSharedPtr是类&#34;类&#34;的提升共享ptr。

typedef boost::shared_ptr<const Class> ClassPtr;

我在添加头文件#include:

后出现以下错误
error: no matching function for call to ‘qHash(const boost::shared_ptr<const Class>&)’

1 个答案:

答案 0 :(得分:0)

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

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

namespace boost {

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

}