хранения объектов
std::vector<_ptr<Obj>> - для хранения объектов
std::unordered_map<size_t, Obj*> - для быстрого получения объекта по некому id-у
плюсы:
быстрый доступ по индексу, быстрый доступ по id-у, быстро итерировать
минусы(или нет?):
2 контейнера
какие есть альтернативы?
зачем доступ по индексу, если есть по id? почему просто не хранить объекты в таблице?
доступ по индексу почти не требуется, а вот быстрый перебор нужен
в таблице? - в какой таблице?
решение есть, осталось узнать задачу, которую оно решает (и контекст/требования к решению), чтобы узнать хорошее оно или нет
Да, хорошо, сейчас напишу задачу:
в хеш-таблице, которая unorderer_map
её итерировать долго же? Если у контейнера 10000 объектов, то перебор unordered_map будет дольше, чем vector?
будет, но настолько ли дольше, чтобы это кто-то заметил в UI коде?
ну, к примеру, если у меня виртуальный listview на 10М записей, я отлистал вниз, мне придётся всю мапу проитерировать, чтобы начать рендерить. А если я потом просто на один итем поднимусь - мне опять придётся отитерировать всю мапу ещё раз. С вектором я просто получу "точку входа" по индексу и начну рендерить
мне, честно говоря, пока не очевидно зачем в listview unordered_map давно я UI не тыкал палкой
вот, да, получается, что вроде vector-а хватает? 🤔
По-моему, вы просто зачем-то смешали 2 разнородных задачи, и пытаетесь героически из решать. Listview -- значит, список элементов -- значит, упорядоченный -- значит, вектор. Если нужен поиск по каким-то данным, то просто отдельно делаете нужное количество мап на всё, по чему нужно быстро искать.
Обсуждают сегодня