Russian Qt Forum
Ноябрь 23, 2024, 00:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Ускорить поиск в списке  (Прочитано 11195 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Сентябрь 10, 2011, 05:32 »

1. когда вы ищите элемент с данным ID, вы точно знаете, что он там есть?
Да
2. id в рамках объекта начинаются с 0 и идут подряд?
Нет. В данном конкретном случае ID лежат в диапазоне [2000..5000]
(мои мысли читаете Улыбающийся)

Если список большой, а извлекать из него нужно намного меньшее количество элементов, то, возможно, будет быстрее осуществлять поиск по массиву ID объектов, данные которых требуется обработать. Т.е. модифицировать Lookup примерно следующим образом:
Код
C++ (Qt)
void Lookup(CObject *header, vector<long> neededID, vector<CObject*> result)
 

1) ОписАлись и подали вектора по значению. Исправьте чтобы не конфузить начинающих

2) push_back не годится, т.к. данные в списке могут идти в любом порядке. Лучше distance и присваивание

3) Вариант лучше прямолинейного хеширования, т.к. оперирует только с небольшим числом "извлекаемых" данных. Но все же недостаточно быстр (создание/удаление 2 векторов, find, потом еше 1 find)

4) Использование неудобно - мне сначала нужно как-то собрать вектор neededID и это должно рихтоваться всякий раз когда понадобится извлечь новое данное. Можно сделать намного быстрее используя статические массивы вместо векторов - но тогда использование станет еще менее удобным
« Последнее редактирование: Сентябрь 10, 2011, 05:44 от Igors » Записан
popper
Гость
« Ответ #16 : Сентябрь 10, 2011, 12:38 »

исправил на передачу векторов по ссылке
возможно, использование статических массивов - это наиболее эффективный способ ускориться, но со всеми вытекающими проблемами в использовании
приведенный Вами код с последовательным вызовом Lookup для разных ID тоже в некотором смысле статический
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #17 : Сентябрь 10, 2011, 16:10 »

возможно, использование статических массивов - это наиболее эффективный способ ускориться, но со всеми вытекающими проблемами в использовании
Есть вариантик получше (без find)  Улыбающийся
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.139 секунд. Запросов: 23.