Добрый вечерПеределываю/обновляю код написанный очень давно (и не мной) на С (практически). Программист использовал список, для простоты КодC++ (Qt)struct CObject {long mID; // идентификатор CObject * mPrev; // предыдущий в списке CObject * mNext; // следующий в списке ..};Конечно то же самое с std::list - не сутьПрофайлер показывает что тормозит на таком участкеКодC++ (Qt)..CObject * theHead = ... // знаем голову спискаCObject * data1 = Lookup(theHead, ID_1); // нашли в списке элемент с ID_1... // используем данные data1 ...CObject * data10 = Lookup(theHead, ID_10); // нашли в списке элемент с ID_10... // используем данные data10 Lookup просматривает элементы начиная с theHead, пока не найдет с нужным ID. Откуда тормоза понятно. Легко сказать "возьми что-то другое вместо списка" - но во-первых это совсем непросто (код велик), а главное - здесь список прекрасно себя оправдывает во многих др. местах (удаления, перелинковки и.т.п) "Глубина поиска" не превышает 500 (хотя весь список может быть намного больше).Как бы мне здесь "ускориться" ?Спасибо
|