Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision | ||
opis_kontenera:map [2008/12/07 18:18] sobol |
opis_kontenera:map [2008/12/07 19:07] sobol |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
====== std::map ====== | ====== std::map ====== | ||
- | Mapa jest kontenerem asocjacyjnym, czyli takim, w którym oprócz wartości (danych) przechowywane są również unikalne klucze nie koniecznie będące zmiennymi całkowitymi. | + | //Autor: Michał Sobiecki//\\ |
- | Przykładem użycia mapy może być książka telefoniczna (powiązanie nazwisko (string) -> numer telefonu) lub interaktywny model nieba (powiązanie położenie planety (punkt) -> informacje o planecie). Innym przykładem użycia mapy jest menedżer zasobów [[http://example.com|Odnośnik zewnętrzny]] | + | |
+ | Mapa jest kontenerem asocjacyjnym, czyli takim, w którym oprócz wartości (danych) przechowywane są również unikalne klucze nie koniecznie będące zmiennymi całkowitymi.\\ | ||
+ | \\ | ||
+ | Przykładem użycia mapy może być książka telefoniczna (powiązanie nazwisko (string) -> numer telefonu) lub interaktywny model nieba (powiązanie położenie planety (punkt) -> informacje o planecie). Innym przykładem użycia mapy jest {{:opis_kontenera:map.cpp|menedżer zasobów}}, lub algorytm wczytywania plików eksportowanych przez program Milkshape3d do indeksowanego bufora wierzchołków.\\ | ||
+ | \\ | ||
+ | W wewnętrznej implementacji mapy obiekty są posortowane według rosnącej wartości kluczy. Projektanci mapy położyli główny nacisk na szybkość odwoływania się do konkretnych elementów według kluczy. Z założenia klucze muszą być unikalne - w przeciwieństwie do [[opis kontenera: multimap|multimapy]] nie mogą istnieć dwa elementy o jednakowym kluczu. Każdy element stanowi para klucz - wartość mapowana.\\ | ||
+ | \\ \\ | ||
+ | <code c++> | ||
+ | template < class Key, class T, class Compare = less<Key>, | ||
+ | class Allocator = allocator<pair<const Key,T> > > class map; | ||
+ | </code> | ||
+ | Gdzie: | ||
+ | * Key - typ jaki będzie przyjmować unikalny dla każdego elementu klucz. | ||
+ | * T - typ wartości mapowanej, danych identyfikowanych z kluczem. | ||
+ | * Compare - klasa porównująca dwa elementy typu Key, zwracająca true jeśli pierwszy z parametrów powinien być umieszczony w mapie przed drugim (jest nie większy). | ||
+ | * Allocator - typ obiektu alokującego. Domyślnie używana jest klasa allocator.\\ | ||
+ | \\ | ||
+ | === Iteratory === | ||
+ | Mapa wspiera iteratory dwukierunkowe. Przy ich pomocy można odwołać się zarówno do klucza jak i danych mapowanych, za pośrednictwem std::pair, przy czym pole first zawsze zawiera klucz, natomiast second zawsze zawiera dane mapowane. | ||
+ | <code c++> | ||
+ | typedef pair<const Key, T> value_type; | ||
+ | </code> | ||
+ | Tak więc wyłuskany iterator (*i) wskazuje na znaleziony obiekt value_type. | ||
+ | |||
+ | === Najważniejsze metody === | ||
+ | == Iteratory == | ||
+ | | begin | Zwraca Iterator na początek mapy. | | ||
+ | | end | Zwraca Iterator na koniec mapy (nie istniejący w mapie). | | ||
+ | == Zawartość mapy == | ||
+ | | empty | sprawdza, czy mapa zawiera jakiekolwiek elementy | | ||
+ | | size | zwraca liczbę elementów w mapie | | ||
+ | | max_size | zwraca maksymalną liczbę elementów w mapie | | ||
+ | == Modyfikatory == | ||
+ | | insert | wstawia nowy element | | ||
+ | | erase | usuwa istniejący element | | ||
+ | | swap | zamienia zawartość mapy która wywołuje z mapą podaną w parametrze | | ||
+ | | clear | usuwa zawartość mapy | | ||
+ | == Inne == | ||
+ | | find | znajduje element o zadanym kluczu w mapie | | ||
+ | | count | zlicza elementy o zadanym kluczu w mapie (może zwrócić 0 lub 1) | | ||
+ | | operator[] | umożliwia dostęp do elementu o kluczu podanym operatorowi | | ||
+ | \\ | ||
+ | === Więcej informacji === | ||
+ | [[http://msdn.microsoft.com/en-us/library/s44w4h2s.aspx|MSDN]]\\ | ||
+ | [[http://www.sgi.com/tech/stl/Map.html|SGI Doc]]\\ | ||
+ | [[http://www.cplusplus.com/reference/stl/map/|C++ Reference]]\\ | ||
+ | [[http://en.wikipedia.org/wiki/Map_(C%2B%2B_container)|Wikipedia]]\\ | ||