Как использовать QSet в качестве значения в QMap?
Я использую Qt и хочу объявить следующий контейнер:
QMap<QUrl , QSet<ClassSharedPtr> > map;
Здесь ClassSharedPtr - это общий расширенный ptr класса "Class".
typedef boost::shared_ptr<const Class> ClassPtr;
Я получаю следующие ошибки после добавления файла заголовка #include:
error: no matching function for call to ‘qHash(const boost::shared_ptr<const Class>&)’
1 ответ
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;
}
}