2011-07-31 11 views
5

Para mi juego, cuando un objeto ingresa en un sensor, necesito agregarlo a una lista, y cuando el objeto abandona el sensor, debe ser eliminado de esa lista. También necesito encontrar rápidamente ese objeto.¿Qué estructura de datos sería mejor para esto?

Así que, esencialmente:

necesito que haga: rápida adición, eliminación rápida y de búsqueda rápida.

¿Qué tipo de estructura de datos que sería mejor para este puesto que en un momento dado, el stucture tendrá unos 10 objetos.

Gracias

+0

> Lo necesito hacer: adición rápida, eliminación rápida y búsqueda rápida. QuickStruct es el camino a seguir – unkulunkulu

+0

QuickStruct ¿qué es exactamente? – jahhaj

+1

Una estructura de datos imaginaria ideal. – unkulunkulu

Respuesta

9

Con 10 objetos algo va a hacer (std::vector, deque o set), y nadie puede decir cuál funciona mejor antes de perfiles.

Si no sabe qué usar, quizás encontrará que std::set tiene una sintaxis más agradable para buscar elementos. Esto es lo que usaría en esta situación, porque no me gustaría escribir std::find(v.begin(), v.end(), sensor) donde simplemente podría escribir s.find(sensor).

Sin embargo, no use std::list, como recomendación general. Necesita una razón convincente para usar listas enlazadas en C++ (el empalme de tiempo constante es uno, la ausencia de invalidación de iterador es otra). Otras estructuras de datos funcionan mejor para la mayoría de las operaciones (excepto para el empalme). Aquí, no veo ningún sentido al usar list en lugar de, por ejemplo. set.

+0

Buen consejo con respecto a las listas. –

+0

El conjunto proporciona una buena velocidad de búsqueda, pero la inserción y eliminación de elementos no es tan rápida como las listas. Debe considerarse qué operación es la más ejecutada. – neodelphi

+2

@neodelphi: averiguar * dónde * insertar o eliminar es más rápido en los conjuntos que en las listas. Entonces no sería tan categórico como tú. Además, es probable que la inserción y eliminación en vectores de 10 elementos sea mucho más rápida que en las listas (por razones de localidad de datos). Realmente no está claro qué contenedor es mejor para el rendimiento, pero creo firmemente que 'std :: list' está detrás. Y es una buena idea obligarse a usar listas solo cuando sea necesario, ya que tienen un rendimiento general muy pobre. –

0

rápida adición, eliminación rápida y la búsqueda rápida, que no quiere hacer mucho usted! Dado lo que dijo, diría lista vinculada, pero también depende de qué tan frecuentes sean las adiciones, las eliminaciones y los hallazgos. Si está encontrando mucho más a menudo de lo que está agregando o borrando cosas, cambie.

realmente la única manera es que probar varios diferentes opciones y el tiempo de ellos.

0

Creo que una lista vinculada sería la mejor. Dado el tamaño pequeño, el acto de cambiar los punteros no afectará el rendimiento.

1

que sugeriría std::list ya que está perfectamente adaptada para la inserción y extracción de elementos.

+1

pero no para búsqueda. –

+0

Ni siquiera diría que es bueno para la inserción de elementos. Es bastante lento en eso. – GManNickG

+0

¿Por qué dices que es lento? – neodelphi

Cuestiones relacionadas