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 ()
parapr1 = „Lemons”, 8;
parapr2 = "pomarańcze", 5;
parapr3 = „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 ()
mapaposeł;
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):
parapra = "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):
parapra = "pears", 12, prb = "pomarańcze", 5, prc = "lemons", 8;
mapaposeł;
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.