C++/Map: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Lethern (dyskusja | edycje)
poprawienie kodu, wyrzucenie niezgodnej licencji. Wyrzucenie "składniki", kompletnie nie nadają się do podręcznika, a na Wikipedię
Linia 4:
 
Mapa zdefiniowana jest w standardowym nagłówku ''map'' oraz w niestandardowym, wstecznie kompatybilnym nagłówku ''map.h''.
 
{| class="wikitable"
! 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.
 
== Przykład ==
<source lang="cpp">
#include<iostream>
#include<map>
using namespace std;
 
int main()
{
map<const int, string> tydzien;
tydzien[1] = "niedziela";
tydzien[2] = "poniedzialek";
tydzien[3] = "wtorek";
tydzien[4] = "sroda";
tydzien[5] = "czwartek";
tydzien[6] = "piatek";
tydzien[7] = "sobota";
 
cout << "trzeci dzien tygodnia: " << tydzien[3] << '\n';
 
map<const int, string>::iterator cur;
#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;
}
 
== Składniki ==
 
 
{|class="wikitable"
!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.
|----
|}
 
== 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:
{|class="wikitable"
!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
 
// zwrocenie elementu o kluczu 3
takiego obiektu operator [] wstawia domyślny obiekt typu data_type().
cur = tydzien.find(3);
|----
|}
 
// elementy o kluczach większych i mniejszych
<div style="font-size:smaller">
map<const int, string>::iterator prev = cur;
----
map<const int, string>::iterator next = cur;
Na stronie wykorzystano materiały z [http://www.sgi.com/tech/stl/Map.html dokumentacji SGI]
++next;
--prev;
 
cout << "Wczesniejszy: " << prev->second << '\n';
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.
cout << "Nastepny: " << next->second << '\n';
}
</source>
 
Copyright © 1994
Hewlett-Packard Company
</div>
 
<noinclude>{{Nawigacja|C++|