Defina a interseção em C ++

Defina a interseção em C ++
A seguir, são seguintes conjuntos de dois caracteres:
p = 'h', 'g', 'f', 'e', ​​'d'
q = 'j', 'i', 'h', 'g', 'f'

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

r = 'f', 'g', 'h'

Organizado em ordem crescente com base nas configurações padrão. A interseção de outros tipos de conjuntos é possível, como interseção de conjuntos de números inteiros, interseção de conjuntos de carros alegóricos, interseção de conjuntos de duplas, etc.

A classe SET na biblioteca C ++ Set, que deve ser incluída no programa para o trabalho definido, não possui uma função de membro para interseção. Portanto, para obter a interseção de conjuntos, a biblioteca de algoritmo, que tem a função set_intersection (), deve ser incluída no programa.

A biblioteca do algoritmo C ++ possui várias funções Set_Intersection sobrecarregadas. Somente os dois mais simples são explicados neste artigo. No entanto, antes do início das explicações, o leitor precisa saber a diferença entre o iterador de saída, o iterador de entrada e o iterador para a frente.

OutputIterator e ForwardIterator

Um iterador é um ponteiro de classe. Um outputiterator é um iterador ao qual um valor pode ser atribuído com a expressão dereferenciada. Por exemplo, se o iterador for i para números inteiros, então;

*i = 5;

faria apontar para o local da memória que tem o valor, 5.

Um inputIterator é um iterador cuja expressão dereferenciada retornaria o valor que o iterador está apontando para. Por exemplo, se o iterador for i para números inteiros e está apontando para o local da memória que possui o número 7;

int num = *i;

faria num segurar o valor, 5.

Um atacante é uma forma elaborada do iterador de entrada.

Gamas

Quando os valores destinados a um conjunto foram inseridos no conjunto, os valores são classificados em ordem crescente com base em configurações padrão. Com conjuntos, dois iteradores avançados podem ser usados ​​para identificar uma variedade de elementos no conjunto. Este artigo está preocupado com toda a gama do conjunto. O programa a seguir mostra como obter os iteradores avançados que representam toda a faixa de um conjunto:

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

definir p = 'h', 'g', 'f', 'e', ​​'d';
definir:: iterator primeiro = p.começar();
definir:: iterator last = p.fim();
retornar 0;

Observe o uso das funções de membro BEGN () e END () da classe Set.

Para fins de interseção de dois conjuntos completos, haverá First1 e Last1 para o primeiro conjunto; e First2 e Last2 para o segundo conjunto; para ambos os intervalos completos.

Iterador de saída

As duas funções set_intersection consideradas neste artigo retornam um iterador de saída. Infelizmente, a classe Set não possui um iterador de saída. Bem, a classe vetorial tem. Isso significa que o iterador de saída da classe vetorial, que é simplesmente chamado de iterador, pode ser usado para receber o iterador de saída retornado pela função set_intersection (). Outra boa notícia é que este vetor iterador pode servir como iterador de saída e iterador de entrada. Não se esqueça de incluir o vetor para usá -lo no programa.

As duas funções sobrecarregadas do set_intersection mencionadas acima agora podem ser discutidas.

Função básica de set_intersection

A sintaxe para esta função na biblioteca do algoritmo é:

modelo
constExpr outputiterator
set_intersection (inputIterator1 primeiro1, inputIterator1 last1,
InputIterator2 First2, InputIterator2 last2, resultado de outputiterator)

O outputiterator é o iterador de saída de retorno, obtido da classe vetorial. Estaria apontando logo após o último elemento prático no vetor. Isso significa que o tamanho do vetor vazio para receber a interseção de conjuntos deve ser estimado para estar acima do número de valores na interseção. O último argumento resultado é o ponteiro do iterador de saída apontando para o início do vetor, que receberá a interseção de conjuntos.

Com o vetor, o iterador de saída retornou, que também é um iterador de entrada, pode ser usado para exibir os valores da interseção de conjuntos usando o loop for-loop. Com a introdução anterior deste artigo, o restante dos parâmetros da função se torna auto-explicativo. O programa a seguir mostra como usar esta função:

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

definir p = 'h', 'g', 'f', 'e', ​​'d';
definir:: iterator primeiro1 = p.começar(); set :: iterator last1 = p.fim();
definir q = 'j', 'i', 'h', 'g', 'f';
definir:: iterator primeiro2 = q.começar(); set :: iterator last2 = q.fim();
vetor vtr (10);
vetor:: iterator outit = set_intersection (primeiro1, last1, primeiro2, last2, vtr.começar());
vtr.redimensionar (outit - vtr.começar());
para (outit = vtr.começar(); fora disso != vtr.fim(); outit ++)
cout << *outIt << ", ";
cout << endl;
retornar 0;

Observe que o vetor teve que ser redimensionado para conter apenas os elementos da interseção depois que a função set_intersection () foi chamada. A saída é:

F, g, h,

Função básica de set_intersection com comparação personalizada

A sintaxe para esta função na biblioteca de algoritmo é:

modelo
constExpr outputiterator
set_intersection (inputIterator1 primeiro1, inputIterator1 last1,
InputIterator2 primeiro2, inputIterator2 last2,
Resultado de saída de saída, compare comp);

OutputIterator é o iterador de saída de retorno obtido da classe vetorial. Estaria apontando logo após o último elemento prático do vetor. Isso significa que o tamanho do vetor vazio para receber a interseção de conjuntos deve ser estimado para estar acima do número de valores na interseção. O último resultado do argumento, mas um argumento é o ponteiro do iterador de saída apontando para o início do vetor, que receberá a interseção de conjuntos.

Com o vetor, o iterador de saída retornou, que também é um iterador de entrada, pode ser usado para exibir os valores da interseção de conjuntos usando o loop for-loop.

Comp, é uma função definida pelo programador. Pode ser:

Bool Comp (char a, char b)
se um != b)
retornar true;
outro
retorna falso;

Esta função comp () retorna verdadeira ou falsa. A partir da introdução deste artigo acima, o restante dos parâmetros da função set_intersection é auto-explicativo.

Com o cabeçalho do programa acima, a função Main () seguinte usará a função Comp () acima com sucesso.

int main ()

definir p = 'h', 'g', 'f', 'e', ​​'d';
definir:: iterator primeiro1 = p.começar(); definir:: iterator last1 = p.fim();
definir q = 'j', 'i', 'h', 'g', 'f';
definir:: iterator primeiro2 = q.começar(); definir:: iterator last2 = q.fim();
vetor vtr (10);
vetor:: iterator outit = set_intersection (primeiro1, last1, primeiro2, last2, vtr.begin (), comp);
vtr.redimensionar (outit - vtr.começar());
para (outit = vtr.começar(); fora disso != vtr.fim(); outit ++)
cout << *outIt << ", ";
cout << endl;
retornar 0;

A saída é:

F, g, h,

o mesmo de antes.

Conclusão

A classe SET na biblioteca C ++ Set, que deve ser incluída no programa para o trabalho definido, não possui uma função de membro para interseção. Portanto, para obter a interseção de conjuntos, a biblioteca de algoritmo, que tem a função set_intersection (), deve ser incluída no programa.

A biblioteca do algoritmo C ++ possui várias funções Set_Intersection sobrecarregadas. Em janeiro de 2022, duas dessas funções que provavelmente foram implementadas pelo seu compilador foram explicadas acima. Os compiladores ainda devem implementar o restante das funções Set_Intersection () sobrecarregadas encontradas na especificação C ++.