crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Есть ли в Qt видоизмененный QMap, тогда не надо будет изобретать велосипед
AD
  опции профиля:
сообщение 18.8.2008, 10:43
Сообщение #1


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


В Qt есть класс-контейнер QMap<Key, Value>. А есть ли в Qt такой спец. QMap, который имеет не один, а два ключа: т.е. вначале ищет по одному ключу, если ничего не нашел, пытается поискать по второму ключу!

Для чего это нужно: чтобы при вот таком, предположим, QMap<QString, QString, double> и такой строке:
QString key = "1243";
double i = map[key];

Он пытался найти этот ключ в 1-ом ключе и во 2-ом?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sploid
  опции профиля:
сообщение 18.8.2008, 10:53
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 51
Регистрация: 26.2.2008
Из: Москва
Пользователь №: 106

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




Репутация:   1  


мне кажется тебе нужен не "спец мап" а что-то с логикой поменять.
можешь рассказать поподробней суть задачи.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 18.8.2008, 11:32
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9632
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(AD @ 18.8.2008, 14:43) *
А есть ли в Qt такой спец. QMap, который имеет не один, а два ключа
нет нету

Цитата(sploid @ 18.8.2008, 14:53) *
мне кажется тебе нужен не "спец мап" а что-то с логикой поменять
солидарен
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 18.8.2008, 12:01
Сообщение #4


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Альтернатива-то есть, но мне она не нравится, потому что в данном случае поможет, а в других нет. В данном случае, можно попросту делать QMap большего размера и записывать туда 2 разных ключа, но с одним и тем же значением.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 18.8.2008, 12:08
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 450
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

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




Репутация:   17  


Зачем тебе это нужно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 18.8.2008, 12:40
Сообщение #6


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата
Зачем тебе это нужно?

Зачем, зачем? Нужно и все тут! :) :p

А если серьезно, то для того, чтобы разобрать этот файл:
m/s|м/с            = 1
minute|минут        = 1
m|м            = 1
1|1            = 1
°|°            = 1
_km|_км            = 1

km/h|км/ч        = 3.6
DDM|РГМ            = 11.429
s|с            = 60
h|ч            = 0.017
km|км            = 1000
1/km|1/км        = 0.001

Альтернативное решение я уже привел.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 18.8.2008, 13:02
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 450
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

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




Репутация:   17  


Опять же всё зависит от того, что ты собираешься делать с данными из этого файла.
Если эти данные изменятся не будут, то и твоё решение вполне прокатит.
Если же будут изменятся, то лучше сделать так:
Выбираешь "нормальную форму ключа, например для "km|км" пусть это всегда будет строка km (а можно просто enum использовать, если ключи заранее известны)
В мапе хранишь данные для ключей только в "нормальной" форме.
При приходе ключа, сначала преобразовываешь его в "нормальную форму", а потом достаёшь данные.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 18.8.2008, 13:07
Сообщение #8


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(Tonal @ 18.8.2008, 14:02) *
Опять же всё зависит от того, что ты собираешься делать с данными из этого файла.
Если эти данные изменятся не будут, то и твоё решение вполне прокатит.
Если же будут изменятся, то лучше сделать так:
Выбираешь "нормальную форму ключа, например для "km|км" пусть это всегда будет строка km (а можно просто enum использовать, если ключи заранее известны)
В мапе хранишь данные для ключей только в "нормальной" форме.
При приходе ключа, сначала преобразовываешь его в "нормальную форму", а потом достаёшь данные.

Прости, но я не понял как сделать то, что ты предлагаешь! А в моем решении, которое, впрочем, я уже сделал, данные будут изменяться только статически и не очень сильно. Ну попросту добавят еще какие-нибудь размерности в заданном формате и все.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 18.8.2008, 13:14
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9632
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


я бы два словаря использовал:
QMap<QString, QString> - m/s = м/с
QMap<QString, double> - m/s = 1
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 18.8.2008, 13:18
Сообщение #10


Активный участник
***

Группа: Участник
Сообщений: 450
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

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




Репутация:   17  


Я примерно это и имел в виду, только к первому словарю часто нужна ещё некоторая обработка, типа убрать пробелы, перевести в нижний регистр...
Поэтому и написал про преобразование в нормальную форму которое в простейшем случаем может свестись к поиску в хеше. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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