Veja o STL eficaz de Scott Meyers. É bom em explicar como usar o STL.
Se você deseja armazenar um número determinado / indeterminado de objetos e nunca excluir nenhum, então um vetor é o que você deseja. É a substituição padrão para uma matriz C e funciona como uma, mas não transborda. Você pode definir seu tamanho antecipadamente e também com reserve ().
Se você deseja armazenar um número indeterminado de objetos, mas irá adicioná-los e excluí-los, provavelmente deseja uma lista ... porque é possível excluir um elemento sem mover nenhum dos seguintes elementos - diferente do vetor. Porém, é preciso mais memória que um vetor e você não pode acessar sequencialmente um elemento.
Se você quiser pegar vários elementos e encontrar apenas os valores exclusivos desses elementos, a leitura de todos eles em um conjunto fará isso e os classificará para você também.
Se você possui muitos pares de valores-chave e deseja classificá-los por chave, um mapa é útil ... mas ele contém apenas um valor por chave. Se você precisar de mais de um valor por chave, poderá ter um vetor / lista como seu valor no mapa ou usar um multimap.
Não está no STL, mas está na atualização TR1 para o STL: se você tiver muitos pares de valores-chave, procurará por chave e não se importará com a ordem deles. deseja usar um hash - que é tr1 :: unordered_map. Eu usei com o Visual C ++ 7.1, onde foi chamado stdext :: hash_map. Ele tem uma pesquisa de O (1) em vez de uma pesquisa de O (log n) para o mapa.