crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Быстро найти int в контейнере, какой пошустрее?
trdm
  опции профиля:
сообщение 14.10.2009, 23:52
Сообщение #1


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

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




Репутация:   6  


Пока использую QList<int>.contains(int),
Но думаю нужно заменить на более шустрый.
Есть такие? Например QSet<int> ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rnd
  опции профиля:
сообщение 15.10.2009, 7:50
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 54
Регистрация: 22.7.2009
Пользователь №: 930

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




Репутация:   0  


Подойдет, только учтите, set хранит только уникальный значения, т.е. два раза вставить одно число не получится

а вообще: контейнеры
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.10.2009, 8:03
Сообщение #3


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

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

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




Репутация:   94  


Лучше сразу смотреть табличку в разделе Алгоритмическая сложность
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DIMEDROLL
  опции профиля:
сообщение 15.10.2009, 10:43
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 165
Регистрация: 28.9.2008
Из: Киев
Пользователь №: 304

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




Репутация:   0  


QSet быстр, ищет за константное время, эт значит что поиск любого элемента занимает одно и то же время и не зависит от кол-ва элементов.
Быстрым так же будет QVector если он будет отсортирован, для поиска элемента используешь алгоритм qBinaryFind, тоесть так:
QVector<int> my_vec;
my_vec.append(123);
....
qSort(my_vec);
qBinaryFind(my_vec.begin(), my_vec.end(), 123);



так у тебя будет быстрое добавление элементов, быстрый поиск(логарифмическое время) и минимальное кол-во потребляемой памяти. Медленным будет только сортировка, но если элементы не будут постоянно добавлятся то ее нужно будет вызвать только раз.

з.ы код не компилил, надеюсь идея ясна :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rnd
  опции профиля:
сообщение 15.10.2009, 10:43
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 54
Регистрация: 22.7.2009
Пользователь №: 930

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




Репутация:   0  


to Litkevich Yuriy,
сравните мою и вашу ссылки:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 15.10.2009, 11:55
Сообщение #6


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

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




Репутация:   6  


Цитата(DIMEDROLL @ 15.10.2009, 11:43) *
з.ы код не компилил, надеюсь идея ясна :)

Яснее ясного, хорошо объяснил. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.10.2009, 9:34
Сообщение #7


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

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

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




Репутация:   94  


rnd, по-русски читать многим проще чем по английски
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 16.10.2009, 10:20
Сообщение #8


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

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

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




Репутация:   17  


Хешь для интов может давать плохое распределение, и тогда QSet::contains может стать практически линейной сложности. :(
Так что лучше сравнить на реальных данных что лучше - сортированный QVector с бинарным поиском или QSet.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.11.2024, 20:55