Название: QMap и типы ключей Key Отправлено: kuzulis от Январь 28, 2009, 12:56 Например такая ситуация, где в качестве ключа используется структура или класс, возвратит ли QMap нужный объект?
Ситуация №1 (в качестве ключа Qmap - класс): Код: //имеется класс ключей потом где-то в программе объявляем: Код: TMyKey Key3; Код: TMyObj *myObj3 = map.value( Key3 ); ===================================================== Ситуация №2 (в качестве ключа QMap - указатель на класс):!!! Код: //имеется класс ключей потом где-то в программе объявляем: Код: TMyKey *Key3 = new TMyKey; Код: TMyObj *myObj3 = map.value( Key3 ); Название: Re: QMap и типы ключей Key Отправлено: kuzulis от Январь 28, 2009, 13:00 PS: для меня это вопрос жизни и смерти! :)
Название: Re: QMap и типы ключей Key Отправлено: pastor от Январь 28, 2009, 13:03 А проверить самому? ;)
Первый пример даже не скомпилятся. Дело в том, что ваши ключ должны иметь operator<(): Цитировать QMap's key type must provide operator<(). QMap uses it to keep its items sorted, and assumes that two keys x and y are equal if neither x < y nor y < x is true. Если в ключе должны быть 2 поля, то не проще бы было использовать QPair вместо своей структуры данных? Если это только пример, то реализуйте operator<(). Во втором примере нужно будет постоянно следить за освобождением памяти, занимаемой ключем. Название: Re: QMap и типы ключей Key Отправлено: Rcus от Январь 28, 2009, 13:19 Среда это такая маленькая пятница? :D
Курите учебники, главу про указатели /*worships Code Complete*/ Название: Re: QMap и типы ключей Key Отправлено: kuzulis от Январь 28, 2009, 13:24 эээ... просто мне ключа типа INT мало.... т.е в моем случае ключем должна являться некая "ссылка"
т.е ссылка - некая структкра - должна состоять из нескольких полей (мне нужно из 7 полей типа Int) - где каждое поле что-то кодирует... т.е суть в следующем: 1. например из какой-то подсистемы А моего приложения приходит сигнал : dataChanged(Link, Data) предназначающийся для подсистемы Б 2. подсистема Б отловила этот сигнал и начинает "раскодирование" ссылки, т.е сопоставление ее с ссылкой, что записана у нее в QMap - для того, чтобы выделить тот объект в подсистеме Б , для которого предназначены данные Data. т.е. если бы мне хватило типа ссылки Link = int - то я б даже и не спрашивал и не парился бы... :( я бы сделал бы так: Код: TMyClass *myObj = map.value( Link ); и потом бы : Код: myObj->setData(Data); Название: Re: QMap и типы ключей Key Отправлено: kuzulis от Январь 28, 2009, 13:29 я сначала хотел состряпать алгоритм поиска объектов перебором по совпадению "ссылки" , которая зранится в текущем выбранном объекте с "ссылкой" - которая пришла с сигналом...
но увидел что в QT есть тип QMap и уж было обрадовался :( Название: Re: QMap и типы ключей Key Отправлено: pastor от Январь 28, 2009, 13:30 Откройте в ассистанте описание QMap. Там есть пример - class Employee. Это ваш случай.
Название: Re: QMap и типы ключей Key Отправлено: kuzulis от Январь 28, 2009, 13:48 спс :)
т.е так: Код: class TLink 1. после этого уже мой класс TLink можно применять в качастве ключа key для QMap ? 2. И больше не нужно делать operator>, operator= и т.д. и т.п ? :) Название: Re: QMap и типы ключей Key Отправлено: pastor от Январь 28, 2009, 14:25 Скорее всего вот так:
Код
Название: Re: QMap и типы ключей Key Отправлено: kuzulis от Январь 28, 2009, 14:33 Спасибо!
Зы: а откудава Вы, pastor и Ko, все это знаете? У вас прям на все есть ответы! Ужос! :) Название: Re: QMap и типы ключей Key Отправлено: Dendy от Январь 28, 2009, 15:00 Это боты-компилляторы с искусственным интеллектом, находу парсят код и выдают ответы. Есть правда проблемы с русским языком, "ститические сборки" всякие, но мы работаем над этим вопросом.
Название: Re: QMap и типы ключей Key Отправлено: Rcus от Январь 28, 2009, 15:05 Не понял магический смысл проверки неравенства чисел типа int перед проверкой <...
В примере Qt была проверка объектов QString (== это всего-лишь проверка совпадения размера и memcmp, а < это ucstrcmp) Название: Re: QMap и типы ключей Key Отправлено: Dendy от Январь 28, 2009, 15:10 Не понял магический смысл проверки неравенства чисел типа int перед проверкой <... Если можно проверить по первому числу - остальные неважны. Если первые числа равны, проверяются вторые. И так до последнего, наименее значимого. Название: Re: QMap и типы ключей Key Отправлено: Rcus от Январь 28, 2009, 15:13 Код ? ADD: хотя нет, не пойдет Название: Re: QMap и типы ключей Key Отправлено: pastor от Январь 28, 2009, 15:14 Есть правда проблемы с русским языком, "ститические сборки" всякие, но мы работаем над этим вопросом. :) |