Ustaw mapę w C ++

Ustaw mapę w C ++
Celem tego artykułu jest podanie podobieństw i różnic między zestawem a mapą. „VS” w tytule oznacza „kontra”. Po pierwsze, co to jest zestaw? - Zestaw w C ++ jest jak zestaw matematyki. W C ++ zestaw jest grupą niekoniecznie niepowiązanych wartości, ale tego samego typu. Wartości zestawu nazywane są klucze w C++.

Co zatem jest mapą? - Mapa to zestaw par kluczy/wartości. W C ++ klucze są tego samego typu, a wartości są również tego samego typu. Jest multiset i jest multimap. Multiset to zestaw, w którym wartości nie są unikalne; Oznacza to, że może istnieć więcej niż jedna z tych samych wartości. Nie zapominaj, że wartości zestawu są nazywane klucze++. Na mapie niektóre wartości mogą być takie same, ale klucze muszą być inne (unikalne). W multimapie może być więcej niż jeden klucz, który jest taki sam.

Tytuł tego artykułu to „Set vs Map in C ++”. Tak więc w tym artykule nie są brane pod uwagę multiset i multimap; Tylko zestaw i mapa są porównywane i kontrastowe.

Za każdym razem, gdy klawisz jest wkładany do zestawu, zestaw jest ponownie sortowany. UWAGA: Zestaw w C ++ może również mieć pary klucza/wartości; I to nie jest matematyczny pogląd na zestaw. - Mimo to w C ++ zestaw może mieć pary klucza/wartości. Tak więc za każdym razem, gdy para klucza/wartości jest wkładana do zestawu, zestaw jest ponownie sortowany przez klucze. Z drugiej strony mapa z definicji składa się z par kluczy/wartości, w których klawisze nie mają duplikatu. Z mapą również za każdym razem, gdy para klucza/wartości jest wkładana do mapy, mapa jest ponownie sortowana przez klawisze. Zestaw i mapa są takie same pod tym względem.

Zarówno zestaw, jak i mapa ma specjalizację szablonu porównywania. Oba są kontenerami asocjacyjnymi. W przypadku jednego z nich, aby struktura danych była sortowana wznoszenie się, użyj specjalizacji szablonu Porównanie, mniej, zastępując „klucz”, typem klucza. W przypadku jednego z nich, aby struktura danych została sortowana zejście, użyj specjalizacji szablonu porównanie, większą, zastępując „klucz”, typem klucza. Dla obu z nich mniej jest domyślnie.

Dla obu struktur danych funkcje członków są kategoriami w następujących kategoriach: konstrukcje (w tym kopia i przypisanie), iteratory, modyfikatory, obserwatorzy, operacje i wymiany. We wszystkich tych kategoriach funkcje członka zarówno dla zestawu, jak i mapy są podobne.

Ustawiona struktura danych nie ma kategorii dostępu do elementu, ale mapa. Kategoria dostępu do elementów składa się z operatorów kwadratowych nawiasów i funkcji członka AT (), które są używane jak odpowiedniki dla wektora. Służą do dostępu (skanowania) każdego elementu na mapie. Zestaw nie ma tych operatorów ani funkcji. W przypadku zestawu dostępu są elementy za pomocą iteratorów. Do mapy można również uzyskać dostęp do mapy za pomocą podobnych iteratorów.

Powyżej znajdują się główne podobieństwa i różnice dla zestawu i mapy. Specyficzność w tym porównaniu dotyczy użycia par kluczy/wartości. Para klucza/wartości jest ze struktury zwanej parą w bibliotece narzędziowej C ++. Reszta tego artykułu zawiera krótki opis tego, w jaki sposób para jest stosowana zarówno w zestawie, jak i na mapie, poczynając od tego, czym jest para:

Para

Składnia dosłowności pary to:

kluczowa wartość

Seria takich par, które składałyby się z zestawu lub mapy, to:

„Lemony”, 8
„pomarańcze”, 5
„Pears”, 12

To reprezentuje strukturę danych owoców i ich liczby znalezione w koszyku. Kluczem dla każdej pary jest typ ciągu; a wartością dla każdej pary jest typ liczby całkowitej. Poniższy program konstruuje trzy różne pary tej samej wartości_typu, String/Int:

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

para pr1 = „Lemons”, 8;
para pr2 = "pomarańcze", 5;
para pr3 = „pears”, 12;
powrót 0;

Zauważ, że biblioteka narzędzi została uwzględniona. Nazwy par to PR1, PR2 i PR3. Są one tego samego wartości, String/int.

Kluczem/wartością pary niekoniecznie może być ciąg/int. Może to być iterator/bool z dosłowną składnią:

iterator, bool

W obiekcie pary Bool jest prawdziwa lub fałsz, a iterator jest nazwą iteratora. Jest to ten rodzaj pary, który jest zwracany, gdy para klucza/wartości, taka jak para String/int, jest wstawiana do zestawu lub mapy. Komponent Bool jest prawdziwy, jeśli i tylko wtedy, gdy nastąpiło wstawienie pary. Komponent iteratora wskazuje na konkretny element wstawiony (klucz i wartość) jako całość.

Klucz pary nazywa się „pierwszy” w C ++; a wartość pary nazywa się „drugim”.

Konstrukcje zestawu i mapy

Ustawić
Pusty zestaw par String/Int zostałby skonstruowany w następujący sposób:

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

ustawić> st;
powrót 0;

Kluczową specjalizacją jest „para” i jest uważana za jeden składnik. Jeden składnik odnosi się do pary (klucza/wartości).

Mapa
Pusta mapa par String/Int zostałaby skonstruowana w następujący sposób:

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

mapa poseł;
powrót 0;

Tutaj specjalizacja szablonów zaczyna się od klucza, a następnie wartości. Specjalizacją szablonu kluczowego jest „ciąg”, a specjalizacja szablonu wartości to „INT”. Istnieją dwa elementy mapy, które są kluczem i wartością. Dla zestawu istnieje jeden komponent, który składa się z dwóch wewnętrznych komponentów. Zwróć uwagę na różnicę.

Wprowadzenie

Ustawić
Poniższy kod funkcji C ++ main () pokazuje, w jaki sposób pary można wstawić do zestawu i wydrukować (wyświetlane na ekranie):

para pra = "pears", 12, prb = "pomarańcze", 5, prc = "lemons", 8;
ustawić> st;
St.wstaw (PRA); St.wstaw (PRB); St.wstaw (PRC);
dla (set> :: iterator iter = st.zaczynać(); iter != st.koniec(); ITER ++)
Cout << iter->Pierwszy << " => " << iter->drugi << endl;

Wyjście to:

cytryny => 8
pomarańcze => 5
gruszki => 12

Zauważ, że chociaż pary klucza/wartości nie zostały wstawione w kolejności rosnącej przez klawisze, elementy, w których wewnętrznie sortowane według klawiszy. Zestaw zawsze będzie sortować swoje elementy według klawiszy, niezależnie od tego, czy są to pary, czy nie.

Mapa
Poniższy kod funkcji main () pokazuje, w jaki sposób pary można wstawić do mapy i wydrukować (wyświetlane na ekranie):

para pra = "pears", 12, prb = "pomarańcze", 5, prc = "lemons", 8;
mapa poseł;
poseł.wstaw (PRA); poseł.wstaw (PRB); poseł.wstaw (PRC);
dla (mapa:: iterator iter = mp.zaczynać(); iter != MP.koniec(); ITER ++)
Cout << iter->Pierwszy << " => " << iter->drugi << endl;

Wyjście to:

cytryny => 8
pomarańcze => 5
gruszki => 12

Chociaż pary klucza/wartości nie zostały wstawione w kolejności rosnącej według klawiszy, elementy, w których wewnętrznie sortowane według klawiszy. Mapa zawsze sortuje swoje elementy według klawiszy.

Wniosek

Podobieństwa i różnice między zestawem a mapą w C ++ są łatwo doceniane na podstawie ich różnych definicji. Specyficzność pojawia się w kontaktach z parami. W C ++ zestaw może mieć pary, co nie jest tak naprawdę sugeruje matematyka. Mimo to programista musi wiedzieć, jak obsługiwać pary dla zestawu i mapy.