Обьекты(указатели на них) храню в векторе std::vector<MyObj*>. Каждый обьект имеет UUID строковый (CString). Дак вот поиск очень долгий по
этим UUID. Как это дело ускорить?
Здравствуйте, gepard1980, Вы писали:
G>Обьекты(указатели на них) храню в векторе std::vector<MyObj*>. Каждый обьект имеет UUID строковый (CString). Дак вот поиск очень долгий по G>этим UUID. Как это дело ускорить?
Здравствуйте, gepard1980, Вы писали:
G>Обьекты(указатели на них) храню в векторе std::vector<MyObj*>. Каждый обьект имеет UUID строковый (CString). Дак вот поиск очень долгий по G>этим UUID. Как это дело ускорить?
Здравствуйте, gepard1980, Вы писали:
G>Обьекты(указатели на них) храню в векторе std::vector<MyObj*>. Каждый обьект имеет UUID строковый (CString). Дак вот поиск очень долгий по G>этим UUID. Как это дело ускорить?
Хранить UUID в бинарном формате.
Использовать unordered_map с функтором UuidHash или map с функтором UuidCompare.
Здравствуйте, gepard1980, Вы писали:
G>Обьекты(указатели на них) храню в векторе std::vector<MyObj*>. Каждый обьект имеет UUID строковый (CString). Дак вот поиск очень долгий по G>этим UUID. Как это дело ускорить?
Если новые объекты появляются в списке относительно редко, то можно отсортировать этот вектор указателей по критерию UUID.
Чтобы не нарушать сортировку вставку выполнять используя тот же компаратор и функцию lower_bound для поиска места вставки элемента, но нужно учесть что такой метод не подойдет если часто вставлять элементы, так как перенос элементов вектора при вставке убьет производительность (хотя если объем данных не очень велик...). Тот же lower_bound использовать и для поиска, только нужно не забыть сравнение с найденным элементом, так как функция находит место вставки и если такой элемент уже есть то на него и укажет, а если нет то соответвенно найдете другой элемент.
Вообще правильно вам посоветовали использовать map, в случае если это основной контейнер, а не вспомогательный и оверхед по объему памяти от организации мапа не страшен