2010-10-24 16 views
21

Quels sont les cas d'utilisation générale pour le C++ standard library containers?Cas d'utilisation générale pour les conteneurs C++

  • bitset
  • deque
  • liste
  • carte
  • multimap
  • multiset
  • priority_queue
  • file d'attente
  • réglé
  • pile
  • vecteur

Par exemple, une carte est généralement mieux pour une recherche par paires.

+1

Ceci est une copie de [Dans quel scénario puis-je utiliser un conteneur STL particulier?] (Https://stackoverflow.com/questions/471432/in-which-scenario-do-i-use-a-particular- stl-container) - les réponses acceptées dans les deux utilisent exactement la même image, et celle-là était plus tôt, et _and_ a plus de réponses, donc ... Il ne semble pas nécessaire d'en avoir 2. –

Répondre

78

Une image vaut mille mots.

container choice flowchart

Il est disponible à partir nolyc, le bot informatif de ## C++ sur Freenode, en utilisant la commande "choix du conteneur" ou "containerchoice". Le lien vers cette image que vous recevez en réponse est hébergé à adrinael.net, ce qui suggère que nous devrions remercier Adrinael, membre de la communauté ## C++ de Freenode.

+13

+1: C'est un image assez utile. – Arun

+1

Très utile image, à peu près exactement ce que je cherchais – Elpezmuerto

+2

Avez-vous une version mise à jour de ce pour refléter les nouveaux conteneurs C++ 11? – Arbalest

13

bitset - utilisé pour stocker des bits. Usage général - stocker les valeurs de certains drapeaux. Vous n'avez pas besoin de plus d'un bit pour cela.

deque - double file d'attente - méthodes push_back, push_front, pop_back et pop_front - classe de base. Conteneur "non trié" (non ordonné).

list - liste chaînée. Ce conteneur n'est pas continu en mémoire. Son heure d'ajout et de suppression d'éléments est O (1), mais la recherche d'un élément spécifique est O (n). Conteneur non ordonné

map - conteneur, stocke les paires (std :: paire). Le premier est la clé - chaque élément de la carte doit être avec une clé unique. La carte est représentée comme arborescence, donc la recherche d'un élément dans la carte est n * log (n). Ce conteneur est toujours trié, c'est pourquoi l'ajout et la suppression d'éléments peuvent causer plus de temps - l'arbre (la structure de données) est binaire et équilibré.

multimap - presque la même chose que std :: map, mais autorise les paires avec les mêmes clés. Par exemple, un multimap pourrait contenir des éléments: (666, "alabala"), (666, "asdfg"), alors que le standard std :: map ne le peut pas. Ce conteneur est également trié.

multiset - de nouveau - identique à l'ensemble, mais avec des éléments répétables. set - bien, c'est aussi toujours un conteneur STL trié. Par exemple, un ensemble est {1, 2, 3} et lorsque vous essayez d'ajouter '1' dans cet ensemble, il ne sera pas ajouté, car il existe déjà un tel élément. (c'est analogique à l'ensemble du mathématique). Ainsi, multiset permet plusieurs éléments avec la même valeur, par exemple {1, 1, 1, 2, 3, 4, 4, 4, 4} est un multiset correct, alors qu'il est pas un ensemble. Ajouter et supprimer un élément dans std :: set est toujours un temps logarithmique, car il est représenté comme un arbre binaire, trié et équilibré.

priority_queue - son premier élément est toujours le plus grand des éléments qu'il contient, selon certaines conditions strictes d'ordre faible. Fonctionnalités de base - push_back et pop_back.

queue - Structure FIFO - Premier entré, premier sorti. (ou le même que LILO - Last In - Last Out). C'est analogique à une file d'attente standard - quand vous allez dans un magasin et commencez à attendre dans la file d'attente, le premier sera le premier à partir. Vous pouvez simplement appuyer sur push_back et pop_front. Conteneur non ordonné

set - Je l'ai déjà décrit dans la section multiset.

stack - LIFO - dernier entré - premier sorti - pile. Fonctionnalités de base - push_back, pop_back. Conteneur non ordonné

vector - analogue à un tableau C++ standard. Il est traité comme un tableau régulier, il est continu en mémoire, il pourrait être passé à un programme C (passant l'adresse du premier élément). Conteneur non ordonné

REMARQUE IMPORTANTE: J'ai décrit la fonctionnalité de base, pas la totalité. Lisez CPlusPlus.com pour plus d'informations.

+2

Je ne sais pas comment les choses étaient en 2010, mais de nos jours, je vois des gens qui conseillent d'utiliser [cppreference.com] (http://en.cppreference.com/w/) au lieu de cplusplus.com, en raison d'un le sentiment que _cppreference_ a une meilleure qualité. Le lien équivalent à _cppreference_ est: [Bibliothèque de conteneurs] (http://en.cppreference.com/w/cpp/container) Btw, je peux garantir que personne dans ce thread n'utilise la STL; ils utilisent la bibliothèque standard, qui s'est juste beaucoup adaptée du STL. Voir http://stackoverflow.com/questions/5205491/whats-this-stl-vs-c-standard-library-fight-all-about/5205571#5205571 –

+0

@underscore_d - oui, cppreference.com est certainement la meilleure source . Je n'utilise plus cplusplus.com, c'est .. disons-le de cette façon - je ne le recommanderais pas. Je suis également d'accord pour la bibliothèque STL et standard. –