【问题标题】:How to use QSet as value in QMap?如何在 QMap 中使用 QSet 作为值?
【发布时间】:2015-10-20 05:07:23
【问题描述】:

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

QMap<QUrl , QSet<ClassSharedPtr> > map;

这里的ClassSharedPtr是类“Class”的boost共享ptr。

typedef boost::shared_ptr<const Class> ClassPtr;

添加头文件#include 后出现以下错误:

error: no matching function for call to ‘qHash(const boost::shared_ptr<const Class>&)’

【问题讨论】:

标签: qt qtwebkit qmap qset


【解决方案1】:

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

所以,你应该为boost::shared_ptr&lt;const Class&gt; 实现qHash() 函数。

namespace boost {

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    相关资源
    最近更新 更多