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 и это должно рихтоваться всякий раз когда понадобится извлечь новое данное. Можно сделать намного быстрее используя статические массивы вместо векторов - но тогда использование станет еще менее удобным