Mapa STL – C++
Problem polega na tym, że najczęściej chcielibyśmy przechowywać w zbiorze elementy jakiegoś bardziej złożonego typu, których on nie będzie potrafił bezpośrednio porównywać (stwierdzać, że jeden jest większy od drugiego), a przez to sortować. Zwykle jest tak, że element posiada szereg pól, z których jeden powinien stanowić kryterium sortowania i wyszukiwania. Tutaj z pomocą przychodzi kolejny kontener STL - mapa. Mapa jest bardzo podobna do zbioru, ale przechowuje kolekcję elementów - tzw. par, z których każda posiada klucz i wartość. Elementy sortuje sobie według klucza i według niego pozwala szybko je wyszukiwać. Rozważmy przykład bazy danych dla firmy, w której mają być przechowywane informacje o klientach w postaci par: jakiś numer identyfikacyjny (liczba) -> opis (łańcuch).
#include using namespace std; int main() { // deklaruję mapę map m; // dodaję elementy m.insert(make_pair(7, "Jan Kowalski - bardzo solidny klient") ); m.insert(make_pair(666, "Maciej Nowak - Klient bardzo niesolidny") ); // znajduję osobę o numerze 7 map ::iterator it = m.find(7); // jeśli się znalazła if ( it != m.end() ) { // wypisuję jej opis pair p = *it; cout << p.second <<endl; } return 0; }
Cała trudność w nauczeniu się używania mapy polega na zrozumieniu, jak należy używać par STL. #include - taki nagłówek trzeba włączyć, żeby skorzystać z mapy STL. map - takiego typu jest zadeklarowana w przykładzie mapa m. Jak widać, w nawiasie kątowym podaje się dwa typy - typ klucza i typ wartości. Elementami mapy będą nierozłącznie związane pary - w tym przypadku pary liczba - łańcuch. Funkcja insert() wstawia do mapy parę. Żeby ją utworzyć, używamy funkcji make_pair(), która pobiera dwie niezależne wartości i zwraca parę, która je zawiera zestawione razem. Funkcja find() wymaga tylko podania klucza, a zwraca iterator pokazujący na odnaleziony element (czyli na parę). Jeśli element się nie znajdzie, zwrócony zostaje błędny iterator - równy wartości zwracanej przez funkcję end(). pair - takiego typu jest tak naprawdę każda para w naszym przykładzie, czyli element naszej mapy. Deklarujemy osobną zmienną tego typu i przepisujemy do niej parę, na którą pokazuje otrzymany iterator. Na ekran wypisana zostaje wartość, czyli drugi spośród składników pary. Znajduje się on w polu o nazwie second i jest łańcuchem. Pierwszy składnik pary, który w mapie pełni rolę klucza, znajduje się w polu o nazwie first i w tym przykładzie jest liczbą.
Zapamiętaj !!!!!! Mapa jest dobra, kiedy najważniejsze jest szybkie znajdowanie elementów.
Życzymy miłego programowania: Marianna Błażewicz Dariusz Szmechtig