Поиск по UUID
От: gepard1980  
Дата: 13.11.09 14:29
Оценка:
Обьекты(указатели на них) храню в векторе std::vector<MyObj*>. Каждый обьект имеет UUID строковый (CString). Дак вот поиск очень долгий по
этим UUID. Как это дело ускорить?
Re: Поиск по UUID
От: abrec Россия  
Дата: 13.11.09 14:33
Оценка:
Здравствуйте, gepard1980, Вы писали:

G>Обьекты(указатели на них) храню в векторе std::vector<MyObj*>. Каждый обьект имеет UUID строковый (CString). Дак вот поиск очень долгий по

G>этим UUID. Как это дело ускорить?

Код бы посмотреть
Re: Поиск по UUID
От: игппук Беларусь  
Дата: 13.11.09 14:37
Оценка:
Здравствуйте, gepard1980, Вы писали:

G>Обьекты(указатели на них) храню в векторе std::vector<MyObj*>. Каждый обьект имеет UUID строковый (CString). Дак вот поиск очень долгий по

G>этим UUID. Как это дело ускорить?

используйте map.
проклятый антисутенерский закон
Re: Поиск по UUID
От: Alexander G Украина  
Дата: 13.11.09 14:43
Оценка:
Здравствуйте, gepard1980, Вы писали:

G>Обьекты(указатели на них) храню в векторе std::vector<MyObj*>. Каждый обьект имеет UUID строковый (CString). Дак вот поиск очень долгий по

G>этим UUID. Как это дело ускорить?

Хранить UUID в бинарном формате.
Использовать unordered_map с функтором UuidHash или map с функтором UuidCompare.
Русский военный корабль идёт ко дну!
Re: Поиск по UUID
От: gepard1980  
Дата: 13.11.09 16:01
Оценка:
Спасибо за ответы! Щаз применить попробую.
Re: Поиск по UUID
От: Alexey Frolov Беларусь  
Дата: 13.11.09 17:07
Оценка:
Здравствуйте, gepard1980, Вы писали:

G>Обьекты(указатели на них) храню в векторе std::vector<MyObj*>. Каждый обьект имеет UUID строковый (CString). Дак вот поиск очень долгий по

G>этим UUID. Как это дело ускорить?

Если новые объекты появляются в списке относительно редко, то можно отсортировать этот вектор указателей по критерию UUID.
Чтобы не нарушать сортировку вставку выполнять используя тот же компаратор и функцию lower_bound для поиска места вставки элемента, но нужно учесть что такой метод не подойдет если часто вставлять элементы, так как перенос элементов вектора при вставке убьет производительность (хотя если объем данных не очень велик...). Тот же lower_bound использовать и для поиска, только нужно не забыть сравнение с найденным элементом, так как функция находит место вставки и если такой элемент уже есть то на него и укажет, а если нет то соответвенно найдете другой элемент.

Вообще правильно вам посоветовали использовать map, в случае если это основной контейнер, а не вспомогательный и оверхед по объему памяти от организации мапа не страшен
Re[2]: Поиск по UUID
От: gepard1980  
Дата: 13.11.09 17:27
Оценка:
Пасиб
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.