C++/Map

Z Wikibooks, biblioteki wolnych podręczników.

< C++

Spis treści

[edytuj] Opis

Mapa to posortowany kontener asocjacyjny, czyli zbiornik o zmiennej długości gromadzący dane, które można dodawać i usuwać. Nie można jednak dodawać danych na konkretną pozycje, ponieważ kolejność ustalana jest wg danej klucz. Mapa jest również parowym zbiornikiem asocjacyjnym, czyli jej elementami są pary wartości klucz i dana. Pierwszej wartości key_type, czyli klucza mapy, nie można zmieniać, natomiast druga wartość danej jest przypisywalna (np.(*i).second=2). Mapa jest w końcu unikalnym kontenerem asocjacyjnym, co oznacza, że żadne dwa elementy nie mają tego samego klucza.

Mapa zdefiniowana jest w standardowym nagłówku map oraz w niestandardowym, wstecznie kompatybilnym nagłówku map.h.

Parametr Opis działania Domyślny
Key Typ klucza mapy. Jest też definiowany jako map::key_type.
Data Typ danych mapy. Jest też definiowany jako map::data_type.
Compare Funkcja porównująca klucze, w porządku ostro malejącym którego typ argumentu to key_type;

zwraca true jeśli pierwszy argument jest mniejszy od drugiego argumentu, w przeciwnym razie

zwraca false. Jest też definiowany jako map::key_compare.

less<Key>
Alloc Alokator mapy, wykorzystywany do zarządzania pamięcią wewnętrzną. alloc


  • Data jest zgodna w sensie przypisania.
  • Compare jest ostro malejącym porządkiem, którego argumenty są typu Key.
  • Alloc jest alokatorem.

[edytuj] Przykład

#include<iostream>
#include<map>
using namespace std;
	  
int main()
{
 map<const int, string> tygodnie;	      
 tygodnie[1] = "niedziela";
 tygodnie[2] = "poniedzialek";
 tygodnie[3] = "wtorek";
 tygodnie[4] = "sroda";
 tygodnie[5] = "czwartek";
 tygodnie[6] = "piatek";
 tygodnie[7] = "sobota";			      
 cout << "trzeci dzien tygodnia:  " << tygodnie[3] << endl;
 map<const int, string>::iterator cur  = tygodnie.find(3);
 map<const int, string>::iterator prev = cur;
 map<const int, string>::iterator next = cur;    
 ++next;
 --prev;
 cout << "Wczesniejszy:  " << prev->second << endl;
 cout << "Nastepny:  " << next->second << endl;
}

[edytuj] Składniki

Składnik Opis działania
key_type Typ klucza mapy, Key.
data_type Typ obiektów powiązanych z kluczem.
value_type Typ obiektu, pair<const key_type, data_type>, magazynowanego w mapie.
key_compare Obiekt funkcyjny, który porównuje dwa klucze w celu ustalenia porządku.
value_compare Obiekt funkcyjny, który porównuje dwa klucze w celu ustalenia porządku.
pointer Wskaźnik na T.
reference Referencja do T.
const_reference Stała referencja do T.
size_type Integralny typ bez znaku.
difference_type Integralny typ ze znakiem.
iterator Iterator używany do iteracji poprzez mapę.
const_iterator Stały iterator używany do iteracji poprzez mapę.
reverse_iterator Iterator używany do iteracji wstecznej poprzez mapę.
const_reverse_iterator Stały iterator używany do iteracji wstecznej poprzez mapę.
iterator begin() Zwraca iterator wskazujący na początek mapy.
iterator end() Zwraca iterator wskazujący na koniec mapy.
const_iterator begin() const Zwraca const_iterator wskazujący na początek mapy.
const_iterator end() const Zwraca const_iterator wskazujący na koniec mapy.
reverse_iterator rbegin() Zwraca reverse_iterator wskazujący na początek wstecznej mapy.
reverse_iterator rend() Zwraca reverse_iterator wskazujący na koniec wstecznej mapy.
const_reverse_iterator rbegin() const Zwraca const_reverse_iterator wskazujący na początek wstecznej mapy.
const_reverse_iterator rend() const Zwraca const_reverse_iterator wskazujący na koniec wstecznej mapy.
size_type size() const Zwraca rozmiar mapy.
size_type max_size() const Zwraca najwiekszy możliwy rozmiar mapy.
bool empty() const Zwraca true jeśli rozmiar mapy to 0.
key_compare key_comp() const Zwraca key_compare obiekt używany przez mapę.
value_compare value_comp() const Zwraca value_compare obiekt używany przez mapę.
map() Tworzy pustą mapę.
map(const key_compare& comp) Tworzy pustą mapę, używając comp jako obiektu key_compare.
template <class InputIterator>

map(InputIterator f, InputIterator l)

Tworzy mapę z kopią zakresu.
template <class InputIterator>

map(InputIterator f, InputIterator l, const key_compare& comp)

Tworzy mapę z kopią zakresu, używając comp jako obiektu key_compare.
map(const map&) Konstruktor kopiujący.
map& operator=(const map&) Operator przypisania.
void swap(map&) Zamienia zawartość dwóch map.
pair<iterator, bool>

insert(const value_type& x)

Wstawia x w mapę.
iterator insert(iterator pos,

const value_type& x)

Wstawia x w mapę, używając pos jako wskazówki gdzie ma być wstawione.
template <class InputIterator>

void insert(InputIterator, InputIterator)

Wstawia zakres w mapę.
void erase(iterator pos) Usuwa element wskazywany przez pos.
size_type erase(const key_type& k) Usuwa element, którego kluczem jest k.
void erase(iterator first, iterator last) Usuwa wszystkie elementy z zakresu.
void clear() Usuwa wszystkie elementy.
iterator find(const key_type& k) Znajduje element, którego kluczem jest k.
const_iterator find(const key_type& k) const Znajduje element, którego kluczem jest k.
size_type count(const key_type& k) Zlicza elementy, których kluczem jest k.
iterator lower_bound(const key_type& k) Znajduje pierwszy element, którego klucz jest nie mniejszy niż k.
const_iterator lower_bound(const key_type& k) const Znajduje pierwszy element, którego klucz jest nie mniejszy niż k.
iterator upper_bound(const key_type& k) Znajduje pierwszy element, którego klucz jest wiekszy niż k.
const_iterator upper_bound(const key_type& k) const Znajduje pierwszy element, którego klucz jest wiekszy niż k.
pair<iterator, iterator>

equal_range(const key_type& k)

Znajduje zakres zawierający wszystkie elementy o kluczu k.
pair<const_iterator, const_iterator>

equal_range(const key_type& k) const

Znajduje zakres zawierający wszystkie elementy o kluczu k.
data_type&

operator[](const key_type& k)

Patrz niżej
bool operator==(const map&,

const map&)

Porównuje dwie mapy pod względem równości. Jest to funkcja globalna, a nie składnikowa.
bool operator<(const map&,

const map&)

Porównanie leksykograficzne. Jest to funkcja globalna, a nie składnikowa.

[edytuj] Nowe składniki

Te składniki nie są zdefiniowane w wymaganiach Unikalnego Posortowanego Kontenera Asocjacyjnego i

Parze Kontenerów Asocjacyjnych, ale są unikalne dla map:

Funkcja składnikowa Opis działania
data_type&

operator[](const key_type& k)

Zwraca referencje do obiektu, który jest powiązany ze danym kluczem. Jeśli mapa nie zawiera

takiego obiektu operator [] wstawia domyślny obiekt typu data_type().


Na stronie wykorzystano materiały z dokumentacji SGI

Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the below copyright notice appears in all copies and that both the copyright notice and this permission notice appear in supporting documentation. Silicon Graphics makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.

Copyright © 1994 Hewlett-Packard Company