Как использовать QSet в качестве значения в QMap?

Я использую Qt и хочу объявить следующий контейнер:

QMap<QUrl , QSet<ClassSharedPtr> > map;

Здесь ClassSharedPtr — это повышающий общий указатель класса «Класс».

typedef boost::shared_ptr<const Class> ClassPtr;

Я получаю следующие ошибки после добавления файла заголовка #include :

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

person BSalunke    schedule 20.10.2015    source источник
comment
Обычно это означает, что вам не хватает включения заголовка.   -  person user2672165    schedule 20.10.2015
comment
Какой компилятор вы используете? Вы видели, что stackoverflow.com/questions/2997340/   -  person demonplus    schedule 20.10.2015


Ответы (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;
}

}
person Meefte    schedule 20.10.2015