Контейнеры STL: définir multiset и. partie 9

Контейнеры STL: définir multiset и. partie 9
4 (80%) 3 votes




класс définir и multiset c ++, контейнеры STL, multiset jeu pour les débutantsTrès souvent, dans la pratique, il est nécessaire de surveiller uniquement ceux qui appartiennent à d'autres installations ou à un sous-ensemble. Ces collections en mathématiques classiques sont appelés beaucoup, à laquelle un objet particulier peut être la propriété ou, ou non,. Et la STL fournit ce type de conteneur, qui est appelée - ensemble<> (beaucoup).

Chaque élément de récipient ensemble<> Il ne contient que la valeur de clé (pas un couple, pour carte<>), donc ce type de récipient est très efficace dans la mise en œuvre du contrôle de fonctionnement dans un ensemble de valeurs. Ce conteneur fournit de nombreuses méthodes communes en comparaison carte с<>, bien voici la qualité dégénérée (et parfois inutiles):

  • opération de collage (méthode insérer()) la nouvelle valeur de clé à l'ensemble des rendements paire type <iterator, bool> (juste, pour carte<>). Dans cette seconde paire de composants (seconde, type bool) des points à la réussite de l'opération: si vrai, la première composante de la valeur de retour (premier) iterator donne un nouvel élément ajouté. Mais il est la valeur de retour tout à fait dénuée de sens: en cas de retour vrai, la nouvelle valeur est ajoutée avec succès à l'ensemble, en cas de retour faux, il est déjà présent dans précédemment défini - dans les deux cas, l'ensemble de l'état final sera identique (Cependant, dans la pratique, la valeur de retour insérer() généralement pas vérifier ... et beaucoup de gens ne savent pas, qu 'il est en général prévu pour la valeur de retour du tout);

  • procédé est mis en oeuvre pour le récipient compter() (pour multimap<>), mais, que la valeur de la clé peut être présent dans l'ensemble en un seul exemplaire, méthode compter() ne peut revenir 0, si cette valeur est manquante, et 1 Lorsqu'une valeur est présente.

  • Procédé mis en oeuvre pour le récipient trouvé(), qui renvoie iterator membre, si la valeur est trouvée, et la valeur de l'itérateur fin() si la valeur est pas dans le jeu.

Pour démontrer ce qui précède va créer une application, est N fois (paramètre, défini dans la commande application de démarrage) boucle génère un nombre aléatoire dans une plage fixe [0…lim] et le met dans le jeu. naturellement, que lorsque N augmente plus que lim (et en outre à N beaucoup Plus lim), chaque tranche de numéros [0…lim] Il va générer un certain nombre de plus en plus de fois:

класс définir и multiset c ++, контейнеры STL, multiset jeu pour les débutants
Dans l'argument des propriétés est pas réglé le débogage

класс définir и multiset c ++, контейнеры STL, multiset jeu pour les débutants
Dans l'argument des propriétés est de débogage 5
класс définir и multiset c ++, контейнеры STL, multiset jeu pour les débutants
Dans l'argument des propriétés est de débogage 100

Un autre type de conteneur est proche multiset<>, permettant à chaque valeur de clé soit unique, et dans l'ensemble d'un certain nombre de fois. Ces deux conteneurs (ensemble<> et multiset<>) si semblables, que, dans l'application ci-dessus, nous allons remplacer tous 2 ligne (méthode compter() pour multiset<> résultats le nombre d'occurrences valeurs dans l'ensemble):

Mais le comportement de l'application change radicalement (à titre de comparaison montre les résultats d'un certain nombre de 2 applications dans des conditions identiques):

класс définir и multiset c ++, контейнеры STL, multiset jeu pour les débutants

visible, que les valeurs de multiset 1, 2, 13, 17… aucun conteneur, et la valeur 18, par exemple, actuellement, il 5 temps.

Bulletin de nouvelles leçons sur la programmation:

huile

Sur huile

une expérience pratique sur le développement de logiciels 40 ans. société de logiciels internationale Global Teacher Logic. IBM Developer Works auteur permanent des publications. éditeur scientifique de l'ordinateur littérature maison d'édition "Symbole-Plus", Saint-Pétersbourg.

Laisser un commentaire

Placez le code dans les balises: <pre class="lang:c ++ décodage:true ">VOTRE CODE</pré>