Związek zestawów w C ++

Związek zestawów w C ++
Rozważ następujące dwa zestawy:
a = „e”, „d”, „c”, „b”, „a”
B = „H”, „g”, „f”, „e”, „d”

W C ++ związkiem tych dwóch zestawów byłoby:

a = „a”, „b”, „c”, „d”, „e”, „f”, „g”, „h”

Elementy zestawu B są połączone z elementami zestawu A bez dwukrotnego elementu, który był w obu zestawach. Każdy taki element pojawia się raz w nowym zestawie. Nowy zestaw jest sortowany w kolejności rosnącej z ustawieniami domyślnymi.

Przed C ++ 20 biblioteka algorytmu musiała być używana w dość skomplikowany sposób, aby mieć połączenie dwóch zestawów. W tym celu biblioteka algorytmu ma funkcję set_union () w różnych przeciążonych formularzach o różnych argumentach. Te przeciążone funkcje są nadal używane dzisiaj, ale set_union () nie zostanie rozwiązany w tym artykule.

Klasa SET w C ++ 20 ma dwie przeciążone funkcje członka scal () w celu uzyskania połączenia dwóch zestawów. Składnie mogą wyglądać skomplikowane, ale są bardzo łatwe w użyciu. Funkcje członka scalania zostaną wykorzystane w tym artykule, aby pokazać, jak uzyskać związek dwóch zestawów.

szablon void scal (zestaw i źródło)

Ta funkcja członka tworzy związek dwóch zestawów. Zwraca pustkę. Jest to zestaw zainteresowania, który wykorzystuje funkcję członka, Merge (). Drugi zestaw łączy się z zestawem zainteresowania. Identyfikator drugiego zestawu jest argumentem funkcji członka scalania.

Argument wygląda skomplikowany, ale tak nie jest. Argument to:

ustawić źródło

To jest szablon zestawu. Zaczyna się od zarezerwowanego słowa, zestaw. Pamiętaj, że ustawione pojedyncze elementy nazywane są klawiszami. Zatem pierwszy parametr szablonu dotyczy typu klucza. Może to być char, float, podwójny, ciąg itp. Parametr drugiego szablonu dotyczy obiektu klasy porównawczej. Jeśli zostanie pominięty, wynik jest taki, że zestaw zostanie posortowany wstępem, wewnętrznie. Trzeci parametr w nawiasach kąt. Jeśli zostanie pominięty, wybrany jest domyślny alokator. Źródło oznacza identyfikator drugiego zestawu (lub zestawu przychodzącego). Tak więc cały ten złożony parametr argumentu w nawiasach składni zostaje zastąpiony identyfikatorem drugiego zestawu w programie.

Podczas tworzenia zestawu zainteresowań lub drugiego zestawu należy wziąć pod uwagę te parametry. W przypadku typowego programowania należy wziąć pod uwagę tylko klucz.

Niech następujący zestaw będzie zestawem zainteresowania:

a = „e”, „d”, „c”, „b”, „a”

Niech następujący zestaw będzie drugim zestawem (lub zestawem przychodzącym).

B = „H”, „g”, „f”, „e”, „d”

Poniższy program łączy zestaw B w zestaw „A”. Nowy zestaw „A” jest zjednoczeniem starego zestawu „A” i ustawionego „B”. Wartości w zestawie B, które nie są w zestawie „A”, są przenoszone do ustawienia „A”.

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

set a = „e”, „d”, „c”, „b”, „a”;
set b = 'h', 'g', 'f', 'e', ​​'d';
A.scal (b);
for (set :: iterator iter = a.zaczynać(); iter != a.koniec(); ITER ++)
Cout << *iter << ", ";
Cout << endl;
powrót 0;

Wyjście to:

A, b, c, d, e, f, g, h,

Należy zauważyć, że zestaw Unii został ułożony w kolejności rosnące.

szablon void scal (set && źródło)

To jest inna przeciążona funkcja członka, która scalała dwa zestawy. Ta funkcja członka tworzy związek dwóch zestawów. Zwraca pustkę. Jest to zestaw zainteresowania, który wykorzystuje funkcję członka, Merge (). Drugi zestaw łączy się z zestawem zainteresowania. Identyfikator drugiego zestawu jest argumentem funkcji merge (). Tym razem identyfikator jest identyfikatorem odniesienia RVALUE.

Argument wygląda skomplikowany, ale tak nie jest. Argument to:

ustawić&& źródło

To jest szablon zestawu. Zaczyna się od zarezerwowanego słowa, zestaw. Pamiętaj, że ustawione pojedyncze elementy nazywane są klawiszami. Zatem pierwszy parametr szablonu dotyczy typu klucza. Może to być char, float, podwójny, ciąg itp. Parametr drugiego szablonu dotyczy obiektu klasy porównawczej. Jeśli zostanie pominięty, wynik jest taki, że zestaw zostanie posortowany wstępem, wewnętrznie. Trzeci parametr w nawiasach kąt. Jeśli zostanie pominięty, wybrany jest domyślny alokator. Źródło w tym przypadku oznacza identyfikator referencyjny RVALUE drugiego zestawu (lub zestawu przychodzącego). Tak więc cały ten złożony parametr argumentu w nawiasach składni zostaje zastąpiony identyfikatorem odniesienia RValue drugiego zestawu w programie. Podwójne amper i, &&, w tym przypadku, oznacza odniesienie RVALUE. Tutaj funkcja ta różni się od poprzedniej.
Podczas tworzenia zestawu zainteresowań lub drugiego zestawu należy wziąć pod uwagę te parametry. W przypadku typowego programowania należy wziąć pod uwagę tylko klucz.

Niech następujący zestaw będzie zestawem zainteresowania:

a = „e”, „d”, „c”, „b”, „a”

Niech następujące ustawiaj dosłownie, będzie drugim zestawem (lub zestawem przychodzącym).

„H”, „g”, „f”, „e”, „d”

Poniższy program łączy zestaw B w zestaw „A”. Nowy zestaw „A” jest zjednoczeniem starego zestawu „A” i ustawionego „B”. Wartości w zestawie B, które nie są w zestawie „A”, są przenoszone do ustawienia „A”.

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

ustawić a = „e”, „d”, „c”, „b”, „a”;
ustawić&& b = „h”, „g”, „f”, „e”, „d”;
A.scal (b);
dla (set:: iterator iter = a.zaczynać(); iter != a.koniec(); ITER ++)
Cout << *iter << ", ";
Cout << endl;
powrót 0;

Wyjście to:

A, b, c, d, e, f, g, h,

Należy zauważyć, że zestaw Unii został ułożony w kolejności rosnące.

Wniosek

Posiadanie połączenia dwóch zestawów również łączy oba zestawy. Zdefiniowana klasa zestawu w C ++ ma w tym celu dwie przeciążone funkcje członka. Zestaw przychodzący (lub inny zestaw) łączy się z zestawem zainteresowania. Zestaw zainteresowania wykorzystuje funkcję członkowską merge (). Identyfikator zestawu przychodzącego jest argumentem funkcji merge (). Tylko elementy, które nie są w zestawie zainteresowań, są przenoszone z zestawu przychodzącego do zestawu zainteresowań. Klasa SET znajduje się w bibliotece Set i musi być włączona do programu.