Regardez Effective STL par Scott Meyers. Il explique bien comment utiliser la STL.
Si vous voulez stocker un nombre déterminé/indéterminé d'objets et que vous n'allez jamais en supprimer, alors un vecteur est ce qu'il vous faut. C'est le remplacement par défaut d'un tableau C, et il fonctionne comme un tableau, mais ne déborde pas. Vous pouvez également définir sa taille à l'avance avec reserve().
Si vous voulez stocker un nombre indéterminé d'objets, mais que vous allez les ajouter et les supprimer, alors vous voulez probablement une liste... parce que vous pouvez supprimer un élément sans déplacer les éléments suivants - contrairement au vecteur. En effet, vous pouvez supprimer un élément sans déplacer les éléments suivants, contrairement à un vecteur. Cependant, la liste prend plus de mémoire qu'un vecteur, et vous ne pouvez pas accéder séquentiellement à un élément.
Si vous voulez prendre un groupe d'éléments et trouver uniquement les valeurs uniques de ces éléments, vous pouvez les lire dans un ensemble et les trier pour vous.
Si vous avez beaucoup de paires clé-valeur, et que vous voulez les trier par clé, alors une map est utile... mais elle ne peut contenir qu'une seule valeur par clé. Si vous avez besoin de plus d'une valeur par clé, vous pouvez utiliser un vecteur/une liste comme valeur dans la map, ou utiliser une multimap.
Ce n'est pas dans la STL, mais c'est dans la mise à jour TR1 de la STL : si vous avez beaucoup de paires clé-valeur que vous allez chercher par clé, et que vous ne vous souciez pas de leur ordre, vous pourriez vouloir utiliser un hash - qui est tr1::unordered_map. Je l'ai utilisé avec Visual C++ 7.1, où il était appelé stdext::hash_map. Il a un lookup de O(1) au lieu d'un lookup de O(log n) pour map.
0 votes
Voulez-vous dire map, vectot, set etc ?
0 votes
Même en regardant ce diagramme, je ne peux pas dire quelle serait la meilleure solution à utiliser dans ma question. stackoverflow.com/questions/9329011/
2 votes
@sbi : Suppression du tag C++Faq de celui-ci et ajout au tag plus récent et incluant C++11. Comment puis-je sélectionner efficacement un conteneur de la bibliothèque standard en C++11 ?
0 votes
J'ai créé un Version modifiable de l'aide-mémoire de Mikael sur les conteneurs C++. . Voici l'antisèche de @MikaelPersson. Malheureusement, je ne peux pas commenter sa réponse car je n'ai pas encore 50 de réputation.