Digamos que tengo una colección de objetos Persona, cada uno de los cuales tiene el siguiente aspecto:¿Qué contenedor STL para datos ordenados con acceso basado en clave?
class Person
{
string Name;
string UniqueID;
}
Ahora, los objetos deben ser almacenados en un contenedor que me permite ordenarlos de modo que pueda determinado elemento X con facilidad localizar el elemento X + 1 y X-1.
Sin embargo, también necesito un acceso rápido basado en el UniqueID, ya que la colección será grande y una búsqueda lineal no lo cortará.
Mi 'solución' actual es usar una lista std :: en conjunto con un std :: map. La lista contiene las Personas (para el acceso ordenado) y el mapa se usa para asignar UniqueID a una referencia al elemento de la lista. La actualización del 'contenedor' generalmente implica actualizar tanto el mapa como la lista.
Funciona, pero creo que debería haber una forma más inteligente de hacerlo, tal vez boost:bimap
. Sugerencias?
EDIT: Existe cierta confusión sobre mis requisitos para "ordenar". Para explicarlo, los objetos se transmiten secuencialmente desde un archivo, y el 'orden' de los elementos en el contenedor debe coincidir con el orden de los archivos. El orden no está relacionado con los ID.
¿Qué quiere decir con 'X + 1' y' X-1'? Tengo la sensación de que no se refiere al campo 'UniqueID', ¿qué es? ¿A qué orden se refiere? –
Me refiero a los pedidos dentro del contenedor. ej. (asumiendo un vector) Matriz [X], [X-1] y [X + 1] – Roddy
¿Cuál es el orden en el contenedor? Creo que eso es lo que Matthieu está tratando de precisar. – Joel