Co to jest std :: map?
W C ++ MAP jest asocjacyjnym kontenerem przechowującym elementy w zmapowanej formie. Każdy element na mapie składa się z pary klucz-wartość i zamapowanej wartości. Dwie zamapowane wartości nie mogą mieć tych samych wartości kluczowych.
Kluczowe wartości są dobre do sortowania i jednoznacznego identyfikowania elementów. Odwzorowane wartości służą do przechowywania treści skojarzonej z kluczem. Oba mogą różnić się typami, ale typ elementu członkowskiego łączy je za pomocą typu pary, który łączy oba.
W tym samouczku C ++ nauczysz się:
- Co to jest std :: map?
- Dlaczego warto używać std :: map?
- Składnia:
- Typy członków:
- Wbudowane funkcje
- Iterowanie po elementach mapy
- Wstawianie danych do std :: map:
- Wyszukiwanie na mapie
- Usuwanie danych z mapy
Dlaczego warto używać std :: map?
Oto powody, dla których warto używać mapy:
- std :: map przechowuje unikalne klucze tylko w kolejności posortowanej na podstawie wybranych kryteriów sortowania.
- Wyszukiwanie elementów za pomocą klucza jest łatwe i szybsze.
- Do każdego klucza dołączony jest tylko jeden element.
- std :: map może służyć jako tablica asocjacyjna.
- std :: map można zaimplementować przy użyciu drzew binarnych (zrównoważone).
Składnia:
Aby zadeklarować std :: map, użyj następującej składni:
std::mapmap_name;
- Key_datatype oznacza typ danych kluczy mapowania.
- Wartość_typ_danych określa typ danych wartości odpowiadających kluczom mapowania.
- Nazwa_mapy to nazwa mapy.
Na przykład:
mapmy_map;
Zadeklarowaliśmy mapę o nazwie my_map. Mapa będzie miała ciąg znaków jako kluczowe typy danych i liczbę całkowitą jako typ danych wartości .
Typy członków:
Funkcje składowe mogą używać następujących typów elementów członkowskich jako parametrów lub typu zwracanego:
- key_type: klucz (pierwszy parametr w szablonie)
- mapped_type: T (drugi parametr w szablonie)
- key_compare: Porównaj (trzeci parametr w szablonie)
- Alokator_type: Alloc (czwarty parametr w szablonie)
- typ_wartości: para
- value_compare: Zagnieżdżona klasa funkcji do porównywania elementów
- referencja: alokator_type :: referencja
- const_reference: alokator_type :: const_reference
- pointer: Alokator_type :: wskaźnik
- const_pointer: Alokator_type :: const_pointer
- iterator: dwukierunkowy iterator do typu value_type
- const_iterator: dwukierunkowy iterator do const value_type
- reverse_iterator: iterator odwrotny
- const_reverse_iterator: stała iterator odwrotny
- różnica_typu : ptrdiff_t
- typ_rozmiaru: rozmiar_t
Wbudowane funkcje
std :: map zawiera wbudowane funkcje. Oto niektóre z nich:
- begin () - Ta funkcja zwraca iterator do pierwszego elementu mapy.
- size () - Ta funkcja zwraca liczbę elementów na mapie.
- empty () - Ta funkcja zwraca wartość logiczną wskazującą, czy mapa jest pusta.
- insert (pair (key, value)) - Ta funkcja wstawia nową parę klucz-wartość do mapy.
- find (val) - Ta funkcja daje iterator elementowi val, jeśli zostanie znaleziony. W przeciwnym razie zwróci m.end ().
- Erase (pozycja iteratora) - Ta funkcja usuwa element w pozycji wskazanej przez iterator.
- erase (const g) - Ta funkcja usuwa klucz-wartość g z mapy.
- Clear () - Ta funkcja usuwa wszystkie elementy z mapy.
Iterowanie po elementach mapy
Możesz iterować po elementach mapy. Musimy po prostu stworzyć iterator i użyć go do tego. Na przykład:
Przykład 1:
#include#include #include
Wynik:
Oto zrzut ekranu kodu:
Objaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego kodu, aby używać jego funkcji.
- Dołącz plik nagłówkowy ciągu do naszego kodu, aby używać jego funkcji.
- Dołącz plik nagłówkowy mapy do naszego kodu, aby używać jego funkcji.
- Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
- Wywołaj funkcję main (). {Oznacza początek treści funkcji.
- Utwórz mapę o nazwie Studenci, w której klucze będą liczbami całkowitymi, a wartości będą ciągami.
- Wstaw wartości do mapy Uczniowie. Do mapy zostanie wstawiony klucz 200 i wartość Alice.
- Wstaw wartości do mapy Uczniowie. Do mapy zostanie wstawiony klucz 201 i wartość John.
- Użyj funkcji size (), aby uzyskać rozmiar mapy o nazwie Studenci. Powinno to zwrócić 2.
- Wydrukuj tekst na konsoli.
- Użyj pętli for, aby utworzyć iterator o nazwie, aby iterować po elementach mapy o nazwie Students.
- Wydrukuj wartości mapy Uczniów na konsoli.
- Koniec treści pętli for.
- Koniec treści funkcji main ().
Wstawianie danych do std :: map
Możesz wprowadzać elementy do std :: map za pomocą funkcji insert (). Pamiętaj, że klucze std :: map muszą być unikalne.
Tak więc najpierw sprawdza, czy każdy klucz jest obecny na mapie. Jeśli jest obecny, wpis nie zostanie wstawiony, ale zwraca iterator dla istniejącego wpisu. Jeśli go nie ma, wpis jest wstawiany.
Funkcja ma następujące warianty:
- insert (pair) - w przypadku tej odmiany do mapy wstawiana jest para klucz-wartość.
- insert (start_itr, end_itr) - przy tej wariacji wpisy będą wstawiane w zakresie określonym przez start_itr i end_itr z innej mapy.
Funkcja insert_or_assing () działa tak samo jak funkcja insert (), ale jeśli dany klucz już istnieje w mapie, jego wartość zostanie zmodyfikowana.
Przykład 2:
#include
Wynik:
Oto zrzut ekranu kodu:
Objaśnienie kodu:
- Dołącz plik nagłówkowy mapy do naszego kodu, aby używać jego funkcji.
- Dołącz plik nagłówkowy iostream do naszego kodu, aby używać jego funkcji.
- Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
- Wywołaj funkcję main (). {Oznacza początek treści funkcji.
- Utwórz mapę o nazwie m, w której klucze będą liczbami całkowitymi, a wartości będą liczbami całkowitymi. Na mapie dokonano trzech wpisów.
- Wstaw nowy wpis do mapy m. Do mapy zostanie wstawiony klucz 5 i wartość 6.
- Próbuję wprowadzić wpis do już istniejącego klucza. Ponieważ klucz 1 już istnieje na mapie, wpis nie zostanie wykonany.
- Użycie funkcji insert_or_ assign () w celu wstawienia lub zmodyfikowania istniejącego wpisu. Ponieważ klucz 1 już istnieje, jego wartość zostanie zmieniona na 6.
- Wydrukuj tekst na konsoli. Znak „\ t” tworzy poziomą spację, podczas gdy znak „\ n” przenosi kursor myszy do następnego wiersza.
- Użyj pętli for, aby utworzyć iterator o nazwie itr do iteracji po elementach mapy o nazwie m.
- Wydrukuj wartości mapy m na konsoli. Znak „\ t” tworzy poziomą spację między każdym klawiszem a odpowiadającą mu wartością. Natomiast znak „\ n” przesuwa kursor myszy do następnej linii po każdej iteracji.
- Koniec treści pętli for.
- Program musi zwrócić wartość po pomyślnym zakończeniu.
- Koniec treści funkcji main ().
Wyszukiwanie na mapie
Możemy użyć funkcji find (), aby wyszukać elementy na mapie według ich kluczy. Jeśli klucz nie zostanie znaleziony, funkcja zwraca std :: map :: end. W przeciwnym razie zostanie zwrócony iterator szukanego elementu.
Przykład 2:
#include#include #include
Wynik:
Oto zrzut ekranu kodu:
Objaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego kodu, aby używać jego funkcji bez błędów.
- Dołącz plik nagłówkowy ciągu do naszego kodu, aby używać jego funkcji bez błędów.
- Dołącz plik nagłówka mapy do naszego kodu, aby używać jego funkcji bez błędów.
- Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
- Wywołaj funkcję main (). {Oznacza początek treści funkcji main ().
- Utwórz mapę o nazwie Studenci, której klucze będą liczbami całkowitymi i łańcuchami wartości.
- Wstaw wartości do mapy Uczniowie. Do mapy zostanie wstawiony klucz 200 i wartość Alice.
- Wstaw wartości do mapy Uczniowie. Do mapy zostanie wstawiony klucz 201 i wartość John.
- Poszukaj wartości skojarzonej z kluczem 201.
- Użyj instrukcji if, aby sprawdzić, czy wartość klucza została znaleziona.
- Wydrukuj wartość klucza obok tekstu na konsoli.
- Koniec treści instrukcji if.
- Koniec treści funkcji main ().
Usuwanie danych z mapy
Możemy użyć funkcji erase (), aby usunąć wartość z mapy. Po prostu tworzymy iterator, który wskazuje na element do usunięcia. Iterator jest następnie przekazywany do funkcji erase ().
Przykład 3:
#include#include #include
Wynik:
Oto zrzut ekranu kodu:
Objaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego kodu, aby używać jego funkcji.
- Dołącz plik nagłówkowy ciągu do naszego kodu, aby używać jego funkcji.
- Dołącz plik nagłówkowy mapy do naszego kodu, aby używać jego funkcji.
- Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
- Wywołaj funkcję main (). {Oznacza początek treści funkcji main ().
- Utwórz mapę o nazwie my_map, której klucze będą ciągami znaków i wartościami całkowitymi.
- Wstaw wartości do mapy my_map. Do mapy zostanie wstawiony klucz Krowa i wartość 1.
- Wstaw wartości do mapy my_map. Do mapy zostanie wstawiony klucz Cat i wartość 2.
- Dodaj wartość 3 do mapy my_map za pomocą klucza lwa.
- Utwórz iterator, aby iterować po mapie my_map w poszukiwaniu klucza cat.
- Usuń element wskazywany przez iterator.
- Użyj iteratora, aby iterować po elementach mapy my_map od początku do końca.
- Wydrukuj zawartość mapy my_map na konsoli.
- Program musi zwrócić dane wyjściowe po pomyślnym zakończeniu.
- Koniec treści funkcji main ().
Podsumowanie:
- Mapa to asocjacyjny kontener, który przechowuje elementy w odwzorowanej formie.
- Każdy element na mapie ma wartość kluczową i wartość zamapowaną.
- Na mapie dwie zamapowane wartości nie mogą mieć wspólnych wartości kluczowych.
- Kluczowe wartości pomagają w jednoznacznym sortowaniu i identyfikowaniu elementów.
- Odwzorowane wartości pomagają w przechowywaniu treści skojarzonej z kluczem.
- Mapa C ++ przechowuje unikalne klucze w posortowanej kolejności.
- Aby pracować z mapą C ++, tworzymy iterator do iteracji po elementach.
- Za pomocą iteratora możemy wykonywać zadania takie jak wyszukiwanie i usuwanie elementów z mapy.