Полная версия этой страницы:
QMap - как реализовать?
Создал QMap<QVariant, struct MY_STRUCT> map;
Пытаюсь в него засунуть пару <ключ, значение>:
MD_ATTR attr;
attr.name = q_attrs->value(r_attrs.indexOf("attr")); //это значение из QsqlQuery, оно типом QVariant, тут без ошибок
m_metadata->attrs.insert(attr.name,attr); //а вот на эту строчку ругается !!!
Текст ругательств:
../../../../programs/qtsdk-2010.05/qt/include/QtCore/qmap.h: In function ‘bool qMapLessThanKey(const Key&, const Key&) [with Key = QVariant]’:
../../../../programs/qtsdk-2010.05/qt/include/QtCore/qmap.h:781:9: instantiated from ‘QMapData::Node* QMap<Key, T>::mutableFindNode(QMapData::Node**, const Key&) const [with Key = QVariant, T = CMetadataManager::_MD_ATTR]’
../../../../programs/qtsdk-2010.05/qt/include/QtCore/qmap.h:561:56: instantiated from ‘QMap<Key, T>::iterator QMap<Key, T>::insert(const Key&, const T&) [with Key = QVariant, T = CMetadataManager::_MD_ATTR]’
cmetadatamanager.cpp:121:48: instantiated from here
Объясните, плз. Можно ли сделать то, что мне нужно (иметь пару ключ-значение моих типов) ?
Что не так?
igor_bogomolov
14.12.2010, 18:40
QVariant не может быть ключом для map
Дословно, компилер тебе сказал, чтоб быть ключом в мапе, нужен оператор меньше, которого для типа QVariant естественно нет...
Судя, навскидку, по твоему коду, можно использовать QString в качестве ключа
вопрос навскидку.
почему QVariant не может быть ключом для QMap? о_О
там же нет прямой зависимости...
bvn13,
ещё раз.
у
QVariant нет
bool operator<() необходимого для ключей QMap.
Цитата
The key type of a QMap must provide operator<() specifying a total order.
Цитата(kwisp @ 14.12.2010, 19:46)
bvn13,
ещё раз.
у
QVariant нет
bool operator<() необходимого для ключей QMap.
Цитата
The key type of a QMap must provide operator<() specifying a total order.
т.е. просто не подходит, т.к. не реализует все..... "дочерние" методы?
Цитата(Гость_Гость_* @ 14.12.2010, 19:53)
т.е. просто не подходит, т.к. не реализует все..... "дочерние" методы?
Просто не подходит, т.к. некоторые типы данных, которые могут содержаться в QVariant просто бессмысленно сравнивать через operator<().
Алексей1153
14.12.2010, 22:05
Если сильно нужно, можно
1) унаследоваться от QVariant
2) или инкапсулировать QVariant
и наследником пользоваться как ключом
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.