Mira Eficaz STL por Scott Meyers. Es bueno para explicar cómo usar el STL.
Si desea almacenar un número determinado / indeterminado de objetos y nunca va a eliminar ninguno, entonces lo que desea es un vector. Es el reemplazo predeterminado para una matriz C, y funciona como uno, pero no se desborda. Puede establecer su tamaño de antemano también con reserve ().
Si desea almacenar un número indeterminado de objetos, pero los agregará y eliminará, entonces probablemente desee una lista ... porque puede eliminar un elemento sin mover ninguno de los siguientes elementos, a diferencia del vector. Sin embargo, requiere más memoria que un vector, y no puede acceder secuencialmente a un elemento.
Si desea tomar un montón de elementos y encontrar solo los valores únicos de esos elementos, leerlos todos en un conjunto lo hará, y también los ordenará por usted.
Si tiene muchos pares clave-valor y desea ordenarlos por clave, entonces un mapa es útil ... pero solo tendrá un valor por clave. Si necesita más de un valor por clave, podría tener un vector / lista como su valor en el mapa, o usar un mapa múltiple.
No está en el STL, pero está en la actualización TR1 del STL: si tiene muchos pares clave-valor que va a buscar por clave, y no le importa su orden, puede desea usar un hash, que es tr1 :: unordered_map. Lo he usado con Visual C ++ 7.1, donde se llamaba stdext :: hash_map. Tiene una búsqueda de O (1) en lugar de una búsqueda de O (log n) para el mapa.