Как использовать 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;
}

}
Другие вопросы по тегам