crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QMap - как реализовать?
bvn13
  опции профиля:
сообщение 14.12.2010, 18:20
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 22.10.2010
Пользователь №: 2143

Спасибо сказали: 0 раз(а)




Репутация:   0  


Создал 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
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


QVariant не может быть ключом для map
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 14.12.2010, 18:54
Сообщение #3


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


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

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

Сообщение отредактировал wiz29 - 14.12.2010, 18:55
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bvn13
  опции профиля:
сообщение 14.12.2010, 19:32
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 22.10.2010
Пользователь №: 2143

Спасибо сказали: 0 раз(а)




Репутация:   0  


вопрос навскидку.
почему QVariant не может быть ключом для QMap? о_О
там же нет прямой зависимости...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 14.12.2010, 19:46
Сообщение #5


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


bvn13,
ещё раз.
у QVariant нет bool operator<() необходимого для ключей QMap.
Цитата
The key type of a QMap must provide operator<() specifying a total order.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 14.12.2010, 19:53
Сообщение #6





Гости








    


Цитата(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
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


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

Просто не подходит, т.к. некоторые типы данных, которые могут содержаться в QVariant просто бессмысленно сравнивать через operator<().
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 14.12.2010, 22:05
Сообщение #8


фрилансер
******

Группа: Участник
Сообщений: 2900
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


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

и наследником пользоваться как ключом
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 12.8.2020, 15:23