Cómo insertar datos en un conjunto de C ++

Cómo insertar datos en un conjunto de C ++
El siguiente es un conjunto de seis nombres de color:
"gris", "blanco", "aqua", "negro", "fucsia", "azul"

Este es un conjunto de cuerdas. Es posible en C ++ tener un conjunto de enteros, un conjunto de carrozas, un conjunto de dobles, etc. Esta es también una matriz literal en c++. También es un inicializador_list. También es el conjunto literal, aunque no se clasifica.

Para tener un conjunto de las cadenas anteriores, el programa C ++ debe comenzar de la siguiente manera:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;

Las primeras tres líneas son directivas. La última línea es una declaración. Las primeras tres líneas incluyen las bibliotecas necesarias. La última línea insiste en el uso del espacio de nombres estándar.

La clase establecida tiene muchas funciones de miembros sobrecargados insert (). Solo cuatro que sean más apropiados se explicarán en este artículo. Los cuatro explicados son para set y no multiset.

Un conjunto siempre se clasifica internamente, ascendiendo de forma predeterminada. Cada vez que se inserta un valor, el conjunto se vuelve a clasificar.

Inserto vacío (Initializer_List)

Esta función de miembro toma como argumento el inicializador_list, que es la matriz literal (igual que el set literal). Puede insertar valores en un conjunto vacío también. La función devuelve nula. El siguiente programa muestra la función miembro en acción:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

colocar calle;
calle.insertar ("gris", "blanco", "aqua", "negro", "fucsia", "azul");
para (establecer:: iterator it = st.comenzar(); él != ST.fin(); it ++)
cout << *it << ", ";

cout << endl;
regresar 0;

La salida es:

Aqua, negro, azul, fucsia, gris, blanco,

Tenga en cuenta que la salida está en orden ascendente de literales de cadena. Si la biblioteca de cadenas no está incluida y se usa const-Char*, entonces son los punteros los que se ordenarían y no los literales de cadenas.

La clase establecida tiene un constructor que puede tomar el inicializador_list. En este caso, no habrá necesidad de insertar inicial. El siguiente código ilustra esto:

colocar st ("gris", "blanco", "aqua", "negro", "fucsia", "azul");
para (establecer:: iterator it = st.comenzar(); él != ST.fin(); it ++)
cout << *it << ", ";

cout << endl;

La salida está quieta,

Aqua, negro, azul, fucsia, gris, blanco,

para la misma entrada; salida ordenada ascendente.

plantilla void insert (inputiterator primero, inputiterator Último)

Esta función miembro insertará un rango de otro conjunto. El rango del otro set comienza desde donde apunta primero el iterador, pero simplemente no incluye el valor al que el iterador último apunta. La función devuelve nula. El siguiente código ilustra esto:

colocar st2 ("púrpura", "azul marino", "amarillo", "oliva", "verde azulado", "rojo", "plateado");
para (establecer:: iterator it = st2.comenzar(); él != ST2.fin(); it ++) cout << *it << ", "; cout << endl;
colocar:: iterator itb2 = st2.comenzar(); colocar:: iterator ite2 = st2.fin();
ITB2 ++; ITB2 ++; ite2--; ite2--; ite2--;
colocar st ("gris", "blanco", "aqua", "negro", "fucsia", "azul");
para (establecer:: iterator it = st.comenzar(); él != ST.fin(); it ++) cout << *it << ", "; cout << endl;
calle.insertar (itb2, ite2);
para (establecer:: iterator it = st.comenzar(); él != ST.fin(); it ++) cout << *it << ", "; cout << endl;

La salida es:

Armada, oliva, púrpura, rojo, plata, verde azulado, amarillo,
Aqua, negro, azul, fucsia, gris, blanco,
Aqua, negro, azul, fucsia, gris, púrpura, rojo, blanco,

El rango ordenado (púrpura, rojo, plata) del set st2, sin "plata" se insertó en el set st. ST se reorensó automáticamente para tener la tercera línea de la salida.

Insertar iterador (posición const_iterator, const valle_type & x)

El segundo argumento de esta función miembro es la variable de un ponderador constante a tipo (char). Esta función miembro debe ajustar el puntero de la cadena en la posición señalada por el iterador, que es el primer argumento. Esto probablemente no va a funcionar como apareció debido a la clasificación que tendrá lugar después de la inserción. La función miembro devuelve un iterador que apunta al elemento insertado. El siguiente programa ilustra esto:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

const char* str = "púrpura";
colocar st ("gris", "blanco", "aqua", "negro", "fucsia", "azul");
para (establecer:: iterator it = st.comenzar(); él != ST.fin(); it ++) cout << *it << ", "; cout << endl;
colocar:: const_iterator itb = st.comenzar(); itb ++; itb ++;
colocar:: iterator iter = st.insertar (itb, str);
cout << *iter << endl;
para (establecer:: iterator it = st.comenzar(); él != ST.fin(); it ++) cout << *it << ", "; cout << endl;
regresar 0;

La salida es:

Aqua, negro, azul, fucsia, gris, blanco,
púrpura
Aqua, negro, azul, fucsia, gris, púrpura, blanco,

ITERATOR INSERT (posición const_iterator, value_type && x)

Esta función miembro es similar a la anterior, pero el segundo argumento es en realidad el valor literal y no la variable. El siguiente programa ilustra esto:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

colocar st ("gris", "blanco", "aqua", "negro", "fucsia", "azul");
para (establecer:: iterator it = st.comenzar(); él != ST.fin(); it ++) cout << *it << ", "; cout << endl;
colocar:: const_iterator itb = st.comenzar(); itb ++; itb ++;
colocar:: iterator iter = st.insertar (itb, "púrpura");
cout << *iter << endl;
para (establecer:: iterator it = st.comenzar(); él != ST.fin(); it ++) cout << *it << ", "; cout << endl;
regresar 0;

La salida es:

Aqua, negro, azul, fucsia, gris, blanco,
púrpura
Aqua, negro, azul, fucsia, gris, púrpura, blanco,

Conclusión

Se puede crear un conjunto en C ++ vacío. Si se crea vacío, la función miembro insert () se puede utilizar para registrar los elementos iniciales del conjunto. En este caso, el inicializador_list debe usarse como argumento único para la función de inserción. La función de miembro sobrecargado correspondiente, devuelve vacío.

Un conjunto siempre se clasifica internamente internamente de forma predeterminada. Cada vez que se inserta un valor, el conjunto se reorta automáticamente. La biblioteca de conjuntos debe incluirse para codificar el conjunto.

Hay otros tres métodos de set de uso común (). Uno devuelve el vacío y los otros dos devuelven un iterador apuntando al elemento insertado. El que devuelve el vacío toma un rango de otro conjunto e inserta en el conjunto de interés. El rango es identificado en la sintaxis por los iteradores, primero y último. El último simplemente no está incluido en el rango insertado.

Para las otras dos funciones miembros, uno inserta la variable de un valor y el otro inserta el valor literal en sí. Ambos se insertan en algunas posiciones previstas. Las posiciones previstas pueden no ser respetadas ya que la clasificación tiene lugar después de la inserción.