21Фев/120
QHash и структура в качестве ключа.
Тема легкая, но мне, почему-то далась достаточно напряжно.
Задача: использовать в качестве ключа QHash структуру.
Читаем документацию - для данной операции достаточно в структуре определить оператор "==" и написать глобальную функцию qHash для нашей структуры.
Решение:
struct MyStruct { quint8 a1; quint8 a2; quint8 a3; quint8 a4; bool operator==(const MyStruct struc) const { return (a1 == struc.a1 && a2 == struc.a2 && a3 == struc.a3 && a4 == struc.a4); } };
uint qHash(const MyStruct &struc) { //как-то вычисляем хеш //в моём случае в структуре содержалось 4 целых числа и я просто записал их в одно число со сдвигом uint result = struc.a1; result <<=(sizeof(quint8)*8); result = result|struc.a2; result <<=(sizeof(quint8)*8); result = result|struc.a3; result <<=(sizeof(quint8)*8); result = result|struc.a4; return result; }
Использование:
QHash < MyStruct, QString > myQHash
Всё работает отлично.
А вот при попытке использовать еще одну структуру в качестве значения QHash
QHash < MyStruct, MyOtherStruct > myOtherQHash
При запросе значения по ключу - всё работает отлично, но при попытке получить ключ по значению получаем надпись:
no match for 'operator==' in 'i.QHash<Key, T>::const_iterator::value [with Key = MyStruct, T = MyOtherStruct]() == avalue'
Страшная надпись, не правда ли? :)
Причина - не хватает операции "==" во второй структуре. Добавляем её и всё работает.
Вот так.
struct, key, qhash
Комментарии (0)
Пинги (0)
(подписаться на новые комментарии в этой ветке)
Нет обратных ссылок на эту запись.
Leave a comment