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 ()
definirp = '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 ()
definirp = 'h', 'g', 'f', 'e', 'd';
definir:: iterator primeiro1 = p.começar(); set :: iterator last1 = p.fim();
definirq = 'j', 'i', 'h', 'g', 'f';
definir:: iterator primeiro2 = q.começar(); set :: iterator last2 = q.fim();
vetorvtr (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 ()
definirp = 'h', 'g', 'f', 'e', 'd';
definir:: iterator primeiro1 = p.começar(); definir :: iterator last1 = p.fim();
definirq = 'j', 'i', 'h', 'g', 'f';
definir:: iterator primeiro2 = q.começar(); definir :: iterator last2 = q.fim();
vetorvtr (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 ++.