A set
est ordonné. Il est garantie de rester dans un ordre spécifique, selon un foncteur que vous fournissez. Quels que soient les éléments que vous ajoutez ou supprimez (à moins que vous n'ajoutiez un doublon, ce qui n'est pas autorisé dans une classe de set
), il sera toujours commandé.
A vector
a exactement et seulement l'ordre que vous lui donnez explicitement. Les éléments d'un vector
sont là où vous les avez mis. Si vous les avez mis dans le désordre, alors ils sont dans le désordre ; vous devez maintenant sort
le conteneur pour les remettre en ordre.
Il faut l'admettre, set
a une utilisation relativement limitée. Avec une discipline appropriée, il est possible d'insérer des éléments dans une vector
et le maintenir en ordre. Cependant, si vous insérez et retirez constamment des éléments du conteneur, vous risquez de vous retrouver dans une situation très difficile, vector
se heurtera à de nombreux problèmes. Il y aura beaucoup de copies/déplacements d'éléments et ainsi de suite, puisqu'il s'agit en fait d'un simple tableau.
Le temps nécessaire à l'insertion d'un élément dans un vector
est proportionnel au nombre d'éléments déjà présents dans la base de données. vector
. Le temps nécessaire à l'insertion d'un élément dans une set
est proportionnelle à la log₂ du nombre d'éléments. Si le nombre d'éléments est élevé, la différence est énorme. log₂(100 000) est ~16 ; c'est une amélioration majeure de la vitesse. Il en va de même pour la suppression.
Cependant, si vous effectuez toutes vos insertions en une seule fois, au moment de l'initialisation, il n'y a pas de problème. Vous pouvez tout insérer dans le fichier vector
, la trier (en payant ce prix une fois), puis utiliser des algorithmes standard pour les données triées. vectors
pour trouver des éléments et itérer sur la liste triée. Et tandis que l'itération sur les éléments d'une set
n'est pas vraiment lent, l'itération sur un fichier vector
est plus rapide.
Il y a donc des cas où un vector
bat un set
. Ceci étant dit, vous ne devriez pas vous soucier des dépenses liées à ce type d'optimisation à moins que vous ne sachiez que c'est nécessaire. Utilisez donc un set
à moins que vous n'ayez l'expérience du type de système que vous écrivez (et donc que vous sachiez que vous avez besoin de cette performance) ou que vous ayez des données de profilage en main qui vous indiquent que vous avez besoin d'un vector
et non un set
.
1 votes
Puisque vous avez lu la rubrique "set", lisez aussi la rubrique "map". Essayez ensuite de comparer à nouveau !
2 votes
Choisissez votre conteneur avec soin