Comment insérer des données dans un ensemble C ++

Comment insérer des données dans un ensemble C ++
Ce qui suit est un ensemble de six noms de couleurs:
"gris", "blanc", "aqua", "noir", "fuchsia", "bleu"

Ceci est un ensemble de chaînes. Il est possible en C ++ d'avoir un ensemble d'entiers, un ensemble de flotteurs, un ensemble de doubles, etc. C'est aussi un réseau littéral en C++. C'est aussi un initialiseur_list. C'est aussi l'ensemble littéral, mais pas trié.

Afin d'avoir un ensemble des chaînes ci-dessus, le programme C ++ devrait commencer comme suit:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;

Les trois premières lignes sont des directives. La dernière ligne est une déclaration. Les trois premières lignes incluent les bibliothèques nécessaires. La dernière ligne insiste sur l'utilisation de l'espace de noms standard.

La classe définie possède de nombreuses fonctions de membre surchargé insert (). Seuls quatre qui sont les plus appropriés seront expliqués dans cet article. Les quatre expliqués sont destinés à set et non à multiset.

Un ensemble est toujours trié en interne, ascendant par défaut. Chaque fois qu'une valeur est insérée, l'ensemble est ré-tripoté.

vide insert (initializer_list)

Cette fonction de membre prend comme argument l'initizizer_list, qui est le littéral du tableau (identique à Set littéral). Il peut également insérer des valeurs dans un ensemble vide. La fonction renvoie vide. Le programme suivant montre la fonction des membres en action:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;
int main()

ensemble St;
St.insérer ("gris", "blanc", "aqua", "noir", "fuchsia", "bleu");
pour (ensemble:: iterator it = st.commencer(); il != st.fin(); it ++)
couter << *it << ", ";

couter << endl;
retour 0;

La sortie est:

aqua, noir, bleu, fuchsia, gris, blanc,

Notez que la sortie est dans l'ordre croissant des littéraux de cordes. Si la bibliothèque de chaînes n'est pas incluse et que Const-Char * est utilisée à la place, alors ce sont les pointeurs qui seraient triés et non les littéraux de chaîne.

La classe SET a un constructeur qui peut prendre l'initialiseur_list. Dans ce cas, il n'y aura pas besoin d'insertion initiale. Le code suivant illustre ceci:

ensemble st ("gris", "blanc", "aqua", "noir", "fuchsia", "bleu");
pour (ensemble:: iterator it = st.commencer(); il != st.fin(); it ++)
couter << *it << ", ";

couter << endl;

La sortie est toujours,

aqua, noir, bleu, fuchsia, gris, blanc,

pour la même entrée; sortie triée ascendant.

Template void insert (inputiterator d'abord, inputiterator en dernier)

Cette fonction membre insérera une plage d'un autre ensemble. La gamme de l'autre ensemble commence à partir de l'endroit où l'itérateur est d'abord pointé, mais n'incluant pas la valeur que l'itérateur est le dernier. La fonction renvoie vide. Le code suivant illustre ceci:

ensemble ST2 ("violet", "marine", "jaune", "olive", "Teal", "Red", "Silver");
pour (ensemble:: iterator it = st2.commencer(); il != ST2.fin(); it ++) cout << *it << ", "; cout << endl;
ensemble:: iterator itb2 = st2.commencer(); ensemble:: iterator ite2 = st2.fin();
itb2 ++; itb2 ++; ite2--; ite2--; ite2--;
ensemble st ("gris", "blanc", "aqua", "noir", "fuchsia", "bleu");
pour (ensemble:: iterator it = st.commencer(); il != st.fin(); it ++) cout << *it << ", "; cout << endl;
St.insérer (itb2, ite2);
pour (ensemble:: iterator it = st.commencer(); il != st.fin(); it ++) cout << *it << ", "; cout << endl;

La sortie est:

marine, olive, violet, rouge, argent, sarcelle, jaune,
aqua, noir, bleu, fuchsia, gris, blanc,
Aqua, noir, bleu, fuchsia, gris, violet, rouge, blanc,

La gamme triée (violet, rouge, argent) du jeu ST2, sans «argent», a été insérée dans le set st st. ST a été réinstallé automatiquement pour avoir la troisième ligne de la sortie.

ITERATOR INSERT (position const_iterator, const value_type & x)

Le deuxième argument de cette fonction membre est la variable d'un type à type constant (char). Cette fonction de membre doit s'adapter au pointeur de chaîne dans la position pointée par l'itérateur qui est le premier argument. Cela ne fonctionnera probablement pas comme il est apparu à cause du tri qui doit avoir lieu après insertion. La fonction membre renvoie un itérateur qui pointe vers l'élément inséré. Le programme suivant illustre ceci:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;
int main()

const char * str = "violet";
ensemble st ("gris", "blanc", "aqua", "noir", "fuchsia", "bleu");
pour (ensemble:: iterator it = st.commencer(); il != st.fin(); it ++) cout << *it << ", "; cout << endl;
ensemble:: const_iterator itb = st.commencer(); itb ++; itb ++;
ensemble:: iterator iter = st.insérer (itb, str);
couter << *iter << endl;
pour (ensemble:: iterator it = st.commencer(); il != st.fin(); it ++) cout << *it << ", "; cout << endl;
retour 0;

La sortie est:

aqua, noir, bleu, fuchsia, gris, blanc,
violet
aqua, noir, bleu, fuchsia, gris, violet, blanc,

ITERATOR INSERT (const_iterator position, valeur_type && x)

Cette fonction membre est similaire à ce qui précède, mais le deuxième argument est en fait la valeur littérale et non la variable. Le programme suivant illustre ceci:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;
int main()

ensemble st ("gris", "blanc", "aqua", "noir", "fuchsia", "bleu");
pour (ensemble:: iterator it = st.commencer(); il != st.fin(); it ++) cout << *it << ", "; cout << endl;
ensemble:: const_iterator itb = st.commencer(); itb ++; itb ++;
ensemble:: iterator iter = st.insérer (itb, "violet");
couter << *iter << endl;
pour (ensemble:: iterator it = st.commencer(); il != st.fin(); it ++) cout << *it << ", "; cout << endl;
retour 0;

La sortie est:

aqua, noir, bleu, fuchsia, gris, blanc,
violet
aqua, noir, bleu, fuchsia, gris, violet, blanc,

Conclusion

Un ensemble en C ++ peut être créé vide. S'il est créé vide, alors la fonction d'insert () peut être utilisée pour insérer les éléments initiaux de l'ensemble. Dans ce cas, le initializer_list doit être utilisé comme seul argument de la fonction d'insertion. La fonction de membre surchargé correspondant, renvoie vide.

Un ensemble est toujours trié en interne par défaut. Chaque fois qu'une valeur est insérée, l'ensemble est réinstallé automatiquement. La bibliothèque SET doit être incluse pour que l'ensemble soit codé.

Il existe trois autres méthodes d'insert () couramment utilisées. L'un revient vide et les deux autres renvoient un itérateur pointant vers l'élément inséré. Celui qui revient vide prend une plage d'un autre ensemble et s'inserve dans l'ensemble d'intérêt. La plage est identifiée dans la syntaxe par les itérateurs, premier et dernier. Le dernier n'est tout simplement pas inclus dans la plage insérée.

Pour les deux autres fonctions membres, l'une insère la variable d'une valeur et l'autre insère la valeur littérale elle-même. Les deux se insérer dans certaines positions prévues. Les positions prévues peuvent ne pas être respectées car le tri a lieu après l'insertion.