Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ QMap - как реализовать?

Автор: bvn13 14.12.2010, 18:20

Создал 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

Автор: wiz29 14.12.2010, 18:54

Дословно, компилер тебе сказал, чтоб быть ключом в мапе, нужен оператор меньше, которого для типа QVariant естественно нет...

Судя, навскидку, по твоему коду, можно использовать QString в качестве ключа

Автор: bvn13 14.12.2010, 19:32

вопрос навскидку.
почему QVariant не может быть ключом для QMap? о_О
там же нет прямой зависимости...

Автор: 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

Цитата(kwisp @ 14.12.2010, 19:46) *
bvn13,
ещё раз.
у QVariant нет bool operator&lt;() необходимого для ключей QMap.
Цитата
The key type of a QMap must provide operator<() specifying a total order.




т.е. просто не подходит, т.к. не реализует все..... "дочерние" методы?

Автор: SABROG 14.12.2010, 20:00

Цитата(Гость_Гость_* @ 14.12.2010, 19:53) *
т.е. просто не подходит, т.к. не реализует все..... "дочерние" методы?

Просто не подходит, т.к. некоторые типы данных, которые могут содержаться в QVariant просто бессмысленно сравнивать через operator<().

Автор: Алексей1153 14.12.2010, 22:05

Если сильно нужно, можно
1) унаследоваться от QVariant
2) или инкапсулировать QVariant

и наследником пользоваться как ключом

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)