Какой контейнер ((STL или нет) [предпочтительно первый]) дает мне самое быстрое (порядок не имеет значения) добавление, удаление и произвольный доступ к элементам?
Никто из них. Вы должны выбрать, какие вещи вы хотите.
Добавление конца к вектору std :: vector также быстро, как и удаление с конца. Но вставка / удаление в другом месте повредит, по крайней мере, несколько.
Вставка и удаление из списка std :: list будет очень быстрым независимо от того, где, но нет произвольного доступа.
В std :: deque есть вставка и удаление в стиле std :: vector, как в начале, так и в конце, и он имеет произвольный доступ.
У меня такой вопрос: как часто вам нужен произвольный доступ к списку объектов столкновений? Не будет ли большая часть ваших операций повторяться по списку (для каждого объекта делать X)? Если это так, я бы пошел на std :: list.
В качестве альтернативы, вы можете использовать std :: map, где ключ карты - это своего рода уникальный идентификатор объекта. Это даст вам более медленную вставку / удаление, чем std :: list (из-за необходимости сбалансированного двоичного дерева), но вы получите возможность доступа к сущности по идентификатору достаточно быстро. Что может быть важно.
Std :: map, вероятно, находится на полпути между std :: vector / deque и std :: list в этом отношении. Более медленная вставка / удаление, чем у списка, более медленный произвольный доступ, чем у вектора / очереди, но вы получаете некоторые из них.
При этом я очень сомневаюсь, что такого рода оптимизация будет очень полезна для вас. Сколько таких объектов у вас будет, может быть, несколько тысяч? Как часто вы их трогаете? Вы действительно думаете, что тип используемого вами контейнера будет значительным фактором в производительности вашей системы столкновений?
Оптимизируйте свои алгоритмы столкновений, прежде чем использовать контейнер для них.