Mapa w C++ Standardowej bibliotece szablonów (STL) z przykładem

Co to jest std::map?

W C++ MAPA to asocjacyjny kontener przechowujący elementy w zmapowanej formie. Każdy element na mapie składa się z pary klucz-wartość i zmapowanej wartości. Dwie mapowane wartości nie mogą współdzielić tych samych wartości klucza.

Kluczowe wartości są dobre do jednoznacznego sortowania i identyfikowania elementów. Zmapowane wartości służą do przechowywania treści powiązanej z kluczem. Oba mogą różnić się typami, ale typ członka łączy je za pomocą typu pary, który łączy oba.

W tym samouczku C++ dowiesz się:

Dlaczego warto używać std::map?

Oto powody korzystania z mapy:

  • std:: map przechowuje unikalne klucze tylko w posortowanej kolejności 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 być używany jako tablica asocjacyjna.
  • std::map można zaimplementować za pomocą drzew binarnych (zrównoważone).

Składnia:

Aby zadeklarować std::map, użyj następującej składni: |_+_|

  • key_datatype oznacza typ danych kluczy mapy.
  • value_datatype oznacza typ danych wartości odpowiadających kluczom mapy.
  • nazwa_mapy to nazwa mapy.

Na przykład: |_+_|

Zadeklarowaliśmy mapę o nazwie my_map. Mapa będzie miała ciąg znaków jako klucz typy danych i liczby całkowite jako wartości typ danych.

Rodzaje członków:

Funkcje członkowskie mogą używać następujących typów członków jako parametrów lub typu zwracanego:

  • typ klucza: Klucz (pierwszy parametr w szablonie)
  • mapped_type: T (drugi parametr w szablonie)
  • key_compare: Porównaj (trzeci parametr w szablonie)
  • allocator_type: Alloc (czwarty parametr w szablonie)
  • typ wartości: para
  • value_compare: Zagnieżdżona klasa funkcji do porównywania elementów
  • referencja: allocator_type::odniesienie
  • const_reference: allocator_type::const_reference
  • wskaźnik: allocator_type::wskaźnik
  • const_pointer: allocator_type::const_pointer
  • iterator: iterator dwukierunkowy do value_type
  • const_iterator: iterator dwukierunkowy do const value_type
  • iterator_odwrotny: iterator odwrotny
  • const_reverse_iterator: stały iterator odwrotny
  • typ_różnicy: ptrdiff_t
  • size_type: rozmiar_t

Wbudowane funkcje

std::map ma wbudowane funkcje. Niektóre z nich to:

  • rozpocząć()- Ta funkcja zwraca iterator do pierwszego elementu mapy.
  • rozmiar()- Ta funkcja zwraca liczbę elementów na mapie.
  • pusty()- Ta funkcja zwraca wartość logiczną wskazującą, czy mapa jest pusta.
  • wstaw(para(klucz, wartość))- Ta funkcja wstawia do mapy nową parę klucz-wartość.
  • znajdź(wartość)- Ta funkcja daje iterator do elementu val, jeśli zostanie znaleziony. W przeciwnym razie zwróci m.end().
  • Wymaż (pozycja iteratora)- Ta funkcja usuwa element w pozycji wskazanej przez iterator.
  • kasuj(const g) — Ta funkcja usuwa klucz-wartość g z mapy.
  • Jasne ()- Ta funkcja usuwa wszystkie elementy z mapy.

Iteracja po elementach mapy

Możesz iterować po elementach mapy. Po prostu musimy stworzyć iterator i użyć go do tego. Na przykład:

Przykład 1:

 std::mapmap_name; 

Wyjście:

Oto zrzut ekranu kodu:

Wyjaśnienie kodu:

  1. Dołącz plik nagłówkowy iostream do naszego kodu, aby korzystać z jego funkcji.
  2. Dołącz plik nagłówka ciągu do naszego kodu, aby korzystać z jego funkcji.
  3. Dołącz plik nagłówka mapy do naszego kodu, aby korzystać z jego funkcji.
  4. Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
  5. Wywołaj funkcję main(). { oznacza początek treści funkcji.
  6. Utwórz mapę o nazwie Studenci, w której klucze będą liczbami całkowitymi, a wartości będą ciągami.
  7. Wstaw wartości do mapy Uczniowie. Do mapy zostanie wstawiony klucz 200 i wartość Alice.
  8. Wstaw wartości do mapy Uczniowie. Do mapy zostanie wstawiony klucz 201 i wartość Jana.
  9. Użyj funkcji size(), aby uzyskać rozmiar mapy o nazwie Studenci. Powinno to zwrócić 2.
  10. Wydrukuj tekst na konsoli.
  11. Użyj pętli for, aby utworzyć iterator nazwany go, aby iterować po elementach mapy o nazwie Studenci.
  12. Wydrukuj wartości mapy Uczniowie na konsoli.
  13. Koniec treści pętli for.
  14. Koniec treści funkcji main().

Wstawianie danych do std::map

Możesz wprowadzić elementy do std::map używając funkcji insert(). Pamiętaj, że klucze std::map muszą być unikalne.

Dlatego 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, wstawiany jest wpis.

Funkcja ma następujące odmiany:

  • wstaw (para)- w przypadku tej odmiany do mapy wstawiana jest para klucz-wartość.
  • wstaw(start_itr, koniec_itr)- z tą odmianą, wpisy zostaną wstawione w zakresie zdefiniowanym przez start_itr i end_itr z innej mapy.

ten wstaw_lub_ocenianie() Funkcja działa tak samo jak funkcja insert(), ale jeśli dany klucz już istnieje na mapie, jego wartość zostanie zmodyfikowana.

Przykład 2:

 map my_map; 

Wyjście:

Oto zrzut ekranu kodu:

Wyjaśnienie kodu:

  1. Dołącz plik nagłówka mapy do naszego kodu, aby korzystać z jego funkcji.
  2. Dołącz plik nagłówkowy iostream do naszego kodu, aby korzystać z jego funkcji.
  3. Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
  4. Wywołaj funkcję main(). { oznacza początek treści funkcji.
  5. Utwórz mapę o nazwie m, w której klucze będą liczbami całkowitymi, a wartości będą liczbami całkowitymi. Do mapy wprowadzono trzy wpisy.
  6. Wstaw nowy wpis do mapy m. Do mapy zostanie wstawiony klucz 5 i wartość 6.
  7. Próba dokonania wpisu do już istniejącego klucza. Ponieważ klucz 1 już istnieje na mapie, wpis nie zostanie wykonany.
  8. Używanie funkcji insert_or_assign() do wstawiania lub modyfikowania istniejącego wpisu. Ponieważ klucz 1 już istnieje, jego wartość zostanie zmieniona na 6.
  9. Wydrukuj tekst na konsoli. Znak ' ' tworzy poziomą spację, podczas gdy znak ' ' przesuwa kursor myszy do następnej linii.
  10. Użyj pętli for, aby utworzyć iterator o nazwie itr, który będzie iterować po elementach mapy o nazwie m.
  11. Wydrukuj wartości mapy m na konsoli. Znak „ ” tworzy poziomą przestrzeń między każdym kluczem a odpowiadającą mu wartością. W przeciwieństwie do tego znak ' ' przesuwa kursor myszy do następnej linii po każdej iteracji.
  12. Koniec korpusu pętli.
  13. Program musi zwrócić wartość po pomyślnym zakończeniu.
  14. Koniec treści funkcji main().

Wyszukiwanie na mapie

Możemy użyć funkcji find() do wyszukiwania elementów na mapie według ich kluczy. Jeśli klucz nie zostanie znaleziony, funkcja zwraca std::map::end. W przeciwnym razie zostanie zwrócony iterator poszukiwanego elementu.

Przykład 2:

 #include #include #include using namespace std; int main() { map Students; Students.insert(std::pair(200, 'Alice')); Students.insert(std::pair(201, 'John')); cout << 'Map size is: ' << Students.size() << endl; cout << endl << 'Default map Order is: ' << endl; for (map::iterator it = Students.begin(); it != Students.end(); ++it) { cout << (*it).first << ': ' << (*it).second << endl; } } 

Wyjście:

Oto zrzut ekranu kodu:

Wyjaśnienie kodu:

  1. Dołącz plik nagłówkowy iostream do naszego kodu, aby korzystać z jego funkcji bez otrzymywania błędów.
  2. Dołącz plik nagłówka ciągu do naszego kodu, aby korzystać z jego funkcji bez otrzymywania błędów.
  3. Dołącz plik nagłówka mapy do naszego kodu, aby korzystać z jego funkcji bez otrzymywania błędów.
  4. Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
  5. Wywołaj funkcję main(). { oznacza początek ciała funkcji main().
  6. Utwórz mapę o nazwie Studenci, której klucze będą liczbami całkowitymi i ciągami wartości.
  7. Wstaw wartości do mapy Uczniowie. Do mapy zostanie wstawiony klucz 200 i wartość Alice.
  8. Wstaw wartości do mapy Uczniowie. Do mapy zostanie wstawiony klucz 201 i wartość Jana.
  9. Poszukaj wartości powiązanej z kluczem 201.
  10. Użyj instrukcji if, aby sprawdzić, czy znaleziono wartość klucza.
  11. Wydrukuj wartość klucza obok tekstu na konsoli.
  12. Koniec treści instrukcji if.
  13. 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 element do usunięcia. Iterator jest następnie przekazywany do funkcji erase().

Przykład 3:

 #include #include using namespace std; int main() { map m{ {1,3} , {2,4} , {3,5} }; m.insert({ 5, 6 }); m.insert({ 1, 8 }); m.insert_or_assign(1, 6); cout << 'Key	Element
'; for (auto itr = m.begin(); itr != m.end(); ++itr) { cout 

Wyjście:

Oto zrzut ekranu kodu:

Wyjaśnienie kodu:

  1. Dołącz plik nagłówkowy iostream do naszego kodu, aby korzystać z jego funkcji.
  2. Dołącz plik nagłówka ciągu do naszego kodu, aby korzystać z jego funkcji.
  3. Dołącz plik nagłówka mapy do naszego kodu, aby korzystać z jego funkcji.
  4. Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
  5. Wywołaj funkcję main(). { oznacza początek treści funkcji main().
  6. Utwórz mapę o nazwie moja_mapa, której klucze będą ciągami i wartościami całkowitymi.
  7. Wstaw wartości do mapy moja_mapa. Do mapy zostanie wstawiony klucz Cow i wartość 1.
  8. Wstaw wartości do mapy moja_mapa. Do mapy zostanie wstawiony klucz Cat i wartość 2.
  9. Dodaj wartość 3 do mapy my_map z kluczem lwa.
  10. Utwórz iterator, aby iterować po mapie my_map w poszukiwaniu kluczowego kota.
  11. Usuń element wskazywany przez iterator.
  12. Użyj iteratora do iteracji elementów mapy my_map od początku do końca.
  13. Wydrukuj zawartość mapy my_map w konsoli.
  14. Program musi zwrócić dane wyjściowe po pomyślnym zakończeniu.
  15. Koniec treści funkcji main().

Streszczenie:

  • Mapa to skojarzony kontener, który przechowuje elementy w formie zmapowanej.
  • Każdy element na mapie ma wartość kluczową i zamapowaną wartość.
  • Na mapie dwie zmapowane wartości nie mogą współdzielić wartości klucza.
  • Kluczowe wartości pomagają w unikalnym sortowaniu i identyfikowaniu elementów.
  • Zmapowane wartości pomagają w przechowywaniu treści powiązanej 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.