Я хотел бы знать, какой контейнер STL будет наиболее подходящим для «постоянно» меняющегося набора элементов с точки зрения производительности.Элементы представляют объекты в данном пространстве просмотра, и, поскольку вид меняется, а объекты перемещаются внутрь и из поля зрения, коллекция объектов должна обновляться.Каждый раз, когда представление обновляется, я получаю std :: vector объектов, которые должны быть в сцене, отсортированные по UID (давайте назовем этот List A).Я хочу выполнить проверку, чтобы:
удалял объекты, которые больше не видны из текущего списка вещей, фактически находящихся в сцене (вызов этого списка B), на основе списка A
добавляет новые объекты, которые теперь видны в списке B, снова на основе списка A
Вероятно, верхний предел числа составляет от двух до четырех тысяч объектовобъектов, когда-либо виденных.Я не могу использовать растровый вектор, поскольку UID объекта исчисляется миллиардами.Я думал, что мог бы использовать std :: map для Списка B. Моя предлагаемая стратегия обновления Списка B:
Для каждого UID 'i' в Списке B найдите UID 'i'в списке A (используя std :: lower_bound).Если UID не существует в списке A, удалите его из списка B.
Для каждого UID 'i' в списке A найдите UID 'i' в списке B (используя std:: Карта :: lower_bound).Если UID не существует в списке B, добавьте его.
Поэтому я хотел бы получить несколько советов, особенно если я использую правильный тип контейнера.Я не думал, что std :: vector будет хорошим выбором для списка B, потому что вставки / удаления будут дорогостоящими, и мне придется явно сортировать, если я хочу использовать бинарный поиск по std :: find.Кроме этого, я не знаю много о других типах контейнеров и о том, являются ли они более подходящими.
Я также хотел бы знать, если общий метод, который я выбрал для обновления ListБ - самый эффективный способ сделать это, и я не просто упускаю что-то очевидное.