Unión de conjuntos en C ++

Unión de conjuntos en C ++
Considere los siguientes dos conjuntos:
a = 'e', 'd', 'c', 'b', 'a'
b = 'h', 'g', 'f', 'e', ​​'d'

En C ++, la unión de estos dos conjuntos sería:

a = 'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h'

Los elementos del conjunto B se unen a los elementos del set A sin tener dos veces ningún elemento que estuviera en ambos sets. Cualquier elemento de este tipo aparece una vez en el nuevo conjunto. El nuevo conjunto se clasifica en orden ascendente con configuración predeterminada.

Antes de C ++ 20, la biblioteca de algoritmo tenía que usarse de una manera bastante complicada de tener la unión de dos sets. Para este fin, la biblioteca de algoritmo tiene la función set_union () en diferentes formas sobrecargadas con argumentos variables. Estas funciones sobrecargadas todavía están en uso hoy, pero set_union () no se abordará en este artículo.

La clase establecida en C ++ 20 tiene dos funciones de miembro de fusión sobrecargada () para obtener la unión de dos conjuntos. Las sintaxis pueden parecer complicadas, pero son muy fáciles de usar. Las funciones de miembros de fusiones se utilizarán en este artículo para mostrar cómo obtener la unión de dos conjuntos.

plantilla nula fusion (set y fuente)

Esta función de miembro crea una unión de dos conjuntos. Devuelve nulo. Es el conjunto de interés que emplea la función miembro, fusion (). El otro conjunto se fusiona con el conjunto de interés. El identificador del otro conjunto es el argumento de la función de miembro de fusión.

El argumento parece complicado, pero no es. El argumento es:

colocar fuente

Esta es la plantilla para set. Comienza con la palabra reservada, establecida. Recuerde que los elementos individuales establecidos se llaman claves. Entonces, el primer parámetro de plantilla es para el tipo de tecla. Puede ser char, flotante, doble, cadena, etc. El segundo parámetro de plantilla es para el objeto de clase Compare. Si se omite, el resultado es que el conjunto se clasificará ascendiendo, internamente. El tercer parámetro en los soportes de ángulo es para la asignación de memoria de los elementos establecidos. Si se omite, se elige el asignador predeterminado. La fuente significa el identificador del otro conjunto (o conjunto entrante). Entonces, todo ese parámetro de argumento complejo entre paréntesis de la sintaxis es reemplazado por el identificador del otro conjunto en el programa.

Al crear el conjunto de interés o el otro conjunto, estos parámetros deben tenerse en cuenta. Para la programación típica, solo la clave debe tenerse en cuenta.

Deje que el siguiente conjunto sea el conjunto de interés:

a = 'e', 'd', 'c', 'b', 'a'

Deje que el siguiente conjunto sea el otro conjunto (o conjunto entrante).

b = 'h', 'g', 'f', 'e', ​​'d'

El siguiente programa fusiona el conjunto B en el conjunto 'A'. El nuevo conjunto 'A' es la unión del antiguo set 'A' y el set 'B'. Los valores en el conjunto B que no están en el conjunto 'a' se mueven para establecer 'a'.

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

establecer a = 'e', 'd', 'c', 'b', 'a';
establecer b = 'h', 'g', 'f', 'e', ​​'d';
a.fusionar (b);
para (set :: iterator iter = a.comenzar(); iter != A.fin(); iter ++)
cout << *iter << ", ";
cout << endl;
regresar 0;

La salida es:

A, B, C, D, E, F, G, H,

Tenga en cuenta que el conjunto de sindicatos se ha organizado en orden ascendente utilizando la clase de comparación predeterminada.

plantilla void fusge (set && fuente)

Esta es la otra función de miembro sobrecargado para fusionar dos conjuntos. Esta función de miembro crea una unión de dos conjuntos. Devuelve nulo. Es el conjunto de interés que emplea la función miembro, fusion (). El otro conjunto se fusiona con el conjunto de interés. El identificador del otro conjunto es el argumento de la función fusion (). Esta vez, el identificador es un identificador de referencia de RValue.

El argumento parece complicado, pero no es. El argumento es:

colocar&& fuente

Esta es la plantilla para set. Comienza con la palabra reservada, establecida. Recuerde que los elementos individuales establecidos se llaman claves. Entonces, el primer parámetro de plantilla es para el tipo de tecla. Puede ser char, flotante, doble, cadena, etc. El segundo parámetro de plantilla es para el objeto de clase Compare. Si se omite, el resultado es que el conjunto se clasificará ascendiendo, internamente. El tercer parámetro en los soportes de ángulo es para la asignación de memoria de los elementos establecidos. Si se omite, se elige el asignador predeterminado. La fuente en este caso representa el identificador de referencia de RValue del otro conjunto (o conjunto entrante). Entonces, todo ese parámetro de argumento complejo entre paréntesis de la sintaxis se reemplaza por el identificador de referencia de RValue del otro conjunto en el programa. Los amperios dobles y, &&, en este caso, significa referencia de rValue. Aquí es donde esta función difiere del anterior.
Al crear el conjunto de interés o el otro conjunto, estos parámetros deben tenerse en cuenta. Para la programación típica, solo la clave debe tenerse en cuenta.

Deje que el siguiente conjunto sea el conjunto de interés:

a = 'e', 'd', 'c', 'b', 'a'

Deje que el siguiente conjunto sea literal, sea el otro conjunto (o conjunto entrante).

'H', 'g', 'f', 'e', ​​'d'

El siguiente programa fusiona el conjunto B en el conjunto 'A'. El nuevo conjunto 'A' es la unión del antiguo set 'A' y el set 'B'. Los valores en el conjunto B que no están en el conjunto 'a' se mueven para establecer 'a'.

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

colocar a = 'e', 'd', 'c', 'b', 'a';
colocar&& b = 'h', 'g', 'f', 'e', ​​'d';
a.fusionar (b);
para (establecer:: iterator iter = a.comenzar(); iter != A.fin(); iter ++)
cout << *iter << ", ";
cout << endl;
regresar 0;

La salida es:

A, B, C, D, E, F, G, H,

Tenga en cuenta que el conjunto de sindicatos se ha organizado en orden ascendente utilizando la clase de comparación predeterminada.

Conclusión

Tener la unión de dos conjuntos también está fusionando ambos sets. La clase de conjunto predefinido en C ++ tiene dos funciones de miembros sobrecargados para este propósito. El conjunto entrante (o el otro conjunto) se fusiona con el conjunto de intereses. El conjunto de intereses emplea la función miembro de fusión (). El identificador del conjunto entrante es el argumento de la función de fusión (). Solo los elementos que no están en el conjunto de intereses se trasladan del conjunto entrante al conjunto de intereses. La clase establecida está en la biblioteca establecida y debe incluirse en el programa.