União de conjuntos em C ++

União de conjuntos em C ++
Considere os dois conjuntos a seguir:
a = 'e', 'd', 'c', 'b', 'a'
b = 'h', 'g', 'f', 'e', ​​'d'

Em C ++, a união desses dois conjuntos seria:

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

Os elementos do conjunto B são unidos aos elementos do conjunto A sem ter duas vezes nenhum elemento que estava nos dois conjuntos. Qualquer elemento desse tipo aparece uma vez no novo conjunto. O novo conjunto é classificado em ordem crescente com configurações padrão.

Antes de C ++ 20, a biblioteca de algoritmo tinha que ser usada de uma maneira bastante complicada de ter a união de dois conjuntos. Para esse fim, a biblioteca de algoritmo tem a função set_union () em diferentes formas sobrecarregadas com argumentos variados. Essas funções sobrecarregadas ainda estão em uso hoje, mas o set_union () não será abordado neste artigo.

A classe definida em C ++ 20 possui duas funções de membro sobrecarregadas () para obter a união de dois conjuntos. As sintaxes podem parecer complicadas, mas são muito fáceis de usar. As funções de membro da mesclagem serão usadas neste artigo para mostrar como obter a união de dois conjuntos.

Modelo Void Merge (Set & Source)

Esta função de membro cria uma união de dois conjuntos. Ele retorna vazio. É o conjunto de interesse que emprega a função de membro, Merge (). O outro conjunto se funde com o conjunto de interesses. O identificador do outro conjunto é o argumento da função de membro da mesclagem.

O argumento parece complicado, mas não é. O argumento é:

definir fonte

Este é o modelo para o conjunto. Começa com a palavra reservada, definida. Lembre -se, esse conjunto de elementos únicos são chamados de chaves. Então, o primeiro parâmetro de modelo é para o tipo de chave. Pode ser char, flutuação, dupla, corda, etc. O segundo parâmetro de modelo é para o objeto de classe de comparação. Se omitido, o resultado é que o conjunto será classificado ascendente, internamente. O terceiro parâmetro nos colchetes do ângulo é para a alocação de memória dos elementos do conjunto. Se omitido, o alocador padrão é escolhido. Fonte significa o identificador do outro conjunto (ou conjunto de entrada). Portanto, todo esse parâmetro de argumento complexo entre parênteses da sintaxe é substituído pelo identificador do outro conjunto no programa.

Ao criar o conjunto de interesse ou o outro conjunto, esses parâmetros devem ser levados em consideração. Para programação típica, apenas a chave deve ser levada em consideração.

Deixe o seguinte conjunto ser o conjunto de interesses:

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

Deixe o seguinte conjunto ser o outro conjunto (ou conjunto de entrada).

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

O programa seguinte se fundir. O novo conjunto 'a' é a união do antigo conjunto 'a' e o conjunto 'b'. Os valores no conjunto B que não estão no set 'a' são movidos para definir 'a'.

#incluir
#incluir
usando namespace std;
int main ()

set a = 'e', 'd', 'c', 'b', 'a';
set b = 'h', 'g', 'f', 'e', ​​'d';
a.mesclar (b);
para (set :: iterator iter = a.começar(); iter != a.fim(); iter ++)
cout << *iter << ", ";
cout << endl;
retornar 0;

A saída é:

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

Observe que o conjunto da união foi organizado em ordem crescente usando a classe de comparação padrão.

Merge de void de modelo (set && origem)

Esta é a outra função de membro sobrecarregada para mesclar dois conjuntos. Esta função de membro cria uma união de dois conjuntos. Ele retorna vazio. É o conjunto de interesse que emprega a função de membro, Merge (). O outro conjunto se funde com o conjunto de interesses. O identificador do outro conjunto é o argumento da função Merge (). Desta vez, o identificador é um identificador de referência Rvalue.

O argumento parece complicado, mas não é. O argumento é:

definir&& fonte

Este é o modelo para o conjunto. Começa com a palavra reservada, definida. Lembre -se de que os elementos únicos são chamados de chaves. Então, o primeiro parâmetro de modelo é para o tipo de chave. Pode ser char, flutuação, dupla, corda, etc. O segundo parâmetro de modelo é para o objeto de classe de comparação. Se omitido, o resultado é que o conjunto será classificado ascendente, internamente. O terceiro parâmetro nos colchetes do ângulo é para a alocação de memória dos elementos do conjunto. Se omitido, o alocador padrão é escolhido. Fonte neste caso significa o identificador de referência do Rvalue do outro conjunto (ou conjunto de entrada). Portanto, todo esse parâmetro de argumento complexo entre parênteses da sintaxe é substituído pelo identificador de referência Rvalue do outro conjunto no programa. O duplo amperes e, &&, neste caso, significa referência de rvalue. É aqui que essa função difere do anterior.
Ao criar o conjunto de interesse ou o outro conjunto, esses parâmetros devem ser levados em consideração. Para programação típica, apenas a chave deve ser levada em consideração.

Deixe o seguinte conjunto ser o conjunto de interesses:

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

Deixe o seguinte conjunto literal, seja o outro conjunto (ou conjunto de entrada).

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

O programa seguinte se fundir. O novo conjunto 'a' é a união do antigo conjunto 'a' e o conjunto 'b'. Os valores no conjunto B que não estão no set 'a' são movidos para definir 'a'.

#incluir
#incluir
usando namespace std;
int main ()

definir a = 'e', 'd', 'c', 'b', 'a';
definir&& b = 'h', 'g', 'f', 'e', ​​'d';
a.mesclar (b);
para (definido:: iterator iter = a.começar(); iter != a.fim(); iter ++)
cout << *iter << ", ";
cout << endl;
retornar 0;

A saída é:

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

Observe que o conjunto da união foi organizado em ordem crescente usando a classe de comparação padrão.

Conclusão

Ter a união de dois conjuntos também está fundindo os dois conjuntos. A classe Set predefinida em C ++ tem duas funções de membro sobrecarregadas para esse fim. O conjunto de entrada (ou o outro conjunto) se funde com o conjunto de interesses. O conjunto de juros emprega a função Merge () do membro. O identificador do conjunto de entrada é o argumento da função Merge (). Somente elementos que não estão no conjunto de interesse são movidos do conjunto de entrada para o conjunto de interesse. A classe Set está na biblioteca de set e deve ser incluída no programa.