¿Cuándo usar una matriz frente a cuándo utilizar un vector cuando se trata de GameObjects?

Entiendo que a partir de otras respuestas, Arrays y Vectors son las mejores opciones. Muchos en SE afirman que las lists vinculadas y los maps son malos para la progtwigción de videojuegos.

Entiendo que, en general, puedo usar matrices. Sin embargo, realmente no entiendo exactamente cuándo usar vectores sobre matrices.

¿Por qué incluso usar vectores? ¿No sería mejor si simplemente usara siempre una Matriz, de esa manera sé cuánta memory necesita mi juego?

Específicamente mi juego solo cargaría un solo área de "Mapa" de teselas, como Map [100] [100], así podría fácilmente tener una matriz de GameObjectContainer GameObjects [100] [100], que reservaría un map completo vale la pena de posibles gameobjects, ¿correcto?

Entonces, ¿por qué usar un Vector? La memory es bastante grande en hardware moderno.

Los vectores son contenedores de acceso aleatorio de tamaño dynamic (generalmente). Facilitan búsquedas de time constante a cualquier location dentro de la matriz, y mejor aún, su almacenamiento directo es contiguo. La desventaja más grande (y es una gran) a los vectores es el performance alcanzado cuando necesitan crecer. Los vectores generalmente asignan una cierta capacidad, y esta capacidad se expande cuando está llena o cuando el tamaño del vector alcanza un umbral específico. Debido a que los vectores que requieren memory contigua mantienen un acceso aleatorio de time constante, deben asignar un bloque de memory completamente nuevo del tamaño apropiado y copyr los contenidos. Esto es lento

Las lists vinculadas, por otro lado, son contenedores de acceso lineal, que requieren que recorras la list (ya sea desde el principio o desde el final), esto dificulta el acceso a un miembro específico de la list. El principal beneficio de las lists vinculadas es la capacidad de agregar y eliminar miembros de datos en time constante. Las lists enlazadas no son contiguas.

Los maps / maps Hash a menudo se construyen sobre un contenedor como un vector (aunque podría ser simplemente un set estándar de estilo C) y proporcionan búsquedas constantes de time a través de la key, en lugar de indexar. Ellos sufren las mismas desventajas que los vectores. La eficacia de un map hash depende de la eficacia de la function hash. No es raro que un algorithm hash sea exclusivo del set de datos, a diferencia de una simple operación de recuento de cubo de module

Todos los types de datos son adecuados a veces, y siempre debe abordar cada problema de manera diferente.

EDITAR: hay numerosas razones para evitar arreglos estándar estilo C, y generalmente vuelven a ser un error del usuario. Uno de los mayores problemas es el riesgo de escribir más allá de los límites de la matriz y modificar algo más en la memory. Esto puede ser un error extremadamente difícil de detectar e incluso más difícil de solucionar. Además, las matrices estilo c no tienen soporte integrado para algorithms STL, iteradores y asignadores.