C++/Set: Różnice pomiędzy wersjami
< C++
Usunięta treść Dodana treść
Nie podano opisu zmian |
wyrzucenie elementów niepowiązanych kontekstem z resztą modułu |
||
Linia 1: | Linia 1: | ||
== Opis == |
== Opis == |
||
Zbiory są jednym z kontenerów biblioteki STL, których struktura oparta jest na drzewach. Elementy które są w nich przechowywane są posortowane, według |
Zbiory są jednym z kontenerów biblioteki STL, których struktura oparta jest na drzewach. Elementy które są w nich przechowywane są posortowane, według pewnego klucza. |
||
Zarówno typ wartosci tych elementów jak i typ wartości klucza są takie same. |
Zarówno typ wartosci tych elementów jak i typ wartości klucza są takie same. |
||
Drzewiasta struktura zapewnia szybkie wyszukiwanie, jednak są z tym związane także pewne mankamenty, mianowicie modyfikacja elementu jest możliwa tylko w taki sposób, że kasujemy stary element, a następnie wstawiamy w to miejsce nowy. |
Drzewiasta struktura zapewnia szybkie wyszukiwanie, jednak są z tym związane także pewne mankamenty, mianowicie modyfikacja elementu jest możliwa tylko w taki sposób, że kasujemy stary element, a następnie wstawiamy w to miejsce nowy. |
||
Korzystając z terminologii STL-a zbiory sa tzw. kontenerami asocjacyjnymi |
|||
(o zmiennej długości, pozwalającymi na operowanie elementami przy użyciu kluczy): |
|||
{|class="wikitable" |
|||
! |
|||
!Rodzaj kontenera |
|||
!Opis |
|||
|---- |
|||
|1 |
|||
|prostymi |
|||
|key_type i value_type są tego samego typu |
|||
|---- |
|||
|2 |
|||
|posortowanymi |
|||
|rosnąco względem klucza |
|||
|---- |
|||
|3 |
|||
|unikalnymi |
|||
|w danym zbiorze nie mogą wsytępowac dwa elementy o tym samym kluczu |
|||
|---- |
|||
|} |
|||
== Parametry == |
|||
{|class="wikitable" |
|||
!Parametr |
|||
!Opis |
|||
|---- |
|||
|Key |
|||
|Klucz zbioru ten sam co typ wartości. Zdefiniowane także jako: set::key_type i set::value_type |
|||
|---- |
|||
|Compare |
|||
|Funkcja porównująca klucze, według słabo rosnącego porządku którego argumenty są typu key_type; |
|||
zwraca true jeśli pierwszy argument jest wcześniejszy od drugiego, w przeciwnym razie zwraca false. Zdefiniowana także jako: set::key_compare i set::value_compare. |
|||
|---- |
|||
|Alloc |
|||
|Alokator zbioru, używany do wewnętrznego zarządzania pamięcią. |
|||
|---- |
|||
|} |
|||
Korzystając z terminologii STL-a zbiory sa tzw. kontenerami asocjacyjnymi (o zmiennej długości, pozwalającymi na operowanie elementami przy użyciu kluczy). |
|||
== Prosty przykład == |
== Prosty przykład == |
||
Linia 81: | Linia 39: | ||
} |
} |
||
</source> |
</source> |
||
== Składniki == |
|||
{|class="wikitable" |
|||
!Składnik |
|||
!Opis działania |
|||
|---- |
|||
|value_type |
|||
|Typ obiektu, T, przechowywany w zbiorze(secie). |
|||
|---- |
|||
|key_type |
|||
|Typ klucza zbioru, powiązany z value_type. |
|||
|---- |
|||
|key_compare |
|||
|Funkcjonał porównujący dwa klucze w celu uporządkowania. |
|||
|---- |
|||
|value_compare |
|||
|Funkcjonał porównujący dwie wartości w celu uporządkowania. |
|||
|---- |
|||
|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 znaku. |
|||
|---- |
|||
|iterator |
|||
|Iterator używany do 'chodzenia' po zbiorze. |
|||
|---- |
|||
|const_iterator |
|||
|Stały iterator używany do 'chodzenia'(iteracji) po zbiorze(tego samego typu co zwykły iterator). |
|||
|---- |
|||
|reverse_iterator |
|||
|Iterator używany do 'chodzenia do tyłu'(iteracji wstecznej) po zbiorze. |
|||
|---- |
|||
|const_reverse_iterator |
|||
|Stały iterator używany do 'chodzenia do tyłu'(iteracji wstecznej) po zbiorze. |
|||
|---- |
|||
|iterator begin() |
|||
|Zwraca iterator wskazujący na początek zbioru. |
|||
|---- |
|||
|iterator end() |
|||
|Zwraca iterator wskazujący na koniec zbioru. |
|||
|---- |
|||
|reverse_iterator rbegin() |
|||
|Zwraca reverse_iterator wskazujący na początek odwróconego zbioru. |
|||
|---- |
|||
|reverse_iterator rend() |
|||
|Zwraca reverse_iterator wskazujący na koniec odwróconego zbioru. |
|||
|---- |
|||
|size_type size() |
|||
|Zwraca rozmiar zbioru. |
|||
|---- |
|||
|size_type max_size() |
|||
|Zwraca największy możliwy rozmiar zbioru. |
|||
|---- |
|||
|bool empty() |
|||
|Zwraca true gdy rozmiar zbioru wynosi 0. |
|||
|---- |
|||
|key_compare key_comp() |
|||
|Zwraca key_compare obiektu używanego przez zbiór. |
|||
|---- |
|||
|value_compare value_comp() |
|||
|Zwraca value_compare obiektu używanego przez zbiór. |
|||
|---- |
|||
|set() |
|||
|Tworzy pusty zbiór. |
|||
|---- |
|||
|set(const key_compare& comp) |
|||
|Tworzy pusty zbiór, używając comp jako key_compare obiektu(klucza porównującego). |
|||
|---- |
|||
|template <class InputIterator> |
|||
set(InputIterator f, InputIterator l) |
|||
|Tworzy zbiór zawierający kopie zakresu. |
|||
|---- |
|||
|template <class InputIterator> |
|||
set(InputIterator f, InputIterator l, const key_compare& comp) |
|||
|Tworzy zbiór zawierający kopie zakresu, używając comp jako key_compare obiektu. |
|||
|---- |
|||
|set(const set&) |
|||
|Konstruktor kopiujący. |
|||
|---- |
|||
|set& operator=(const set&) |
|||
|Operator przypisania. |
|||
|---- |
|||
|void swap(set&) |
|||
|Zamienia zawartość dwóch zbiorów. |
|||
|---- |
|||
|pair<iterator, bool> |
|||
insert(const value_type& x) |
|||
|Wstawia do zbioru element x. |
|||
|---- |
|||
|iterator insert(iterator pos, const value_type& x) |
|||
|Wstawia do zbioru element x. Używa pos do wskazania miejsca, w którym ma być wstawiony. |
|||
|---- |
|||
|template <class InputIterator> |
|||
void insert(InputIterator, InputIterator) |
|||
|Wstawia do zbioru zakres. |
|||
|---- |
|||
|void erase(iterator pos) |
|||
|Kasuje element wskazywany przez pos. |
|||
|---- |
|||
|size_type erase(const key_type& k) |
|||
|Kasuje element którego kluczem jest k. |
|||
|---- |
|||
|void erase(iterator first, iterator last) |
|||
|Kasuje wszystkie elementy z danego zakresu. |
|||
|---- |
|||
|void clear() |
|||
|Kasuje wszystkie elementy zbioru. |
|||
|---- |
|||
|iterator find(const key_type& k) const |
|||
|Znajduje element, którego klucz wynosi k. |
|||
|---- |
|||
|size_type count(const key_type& k) const |
|||
|Zwraca liczbę elementów, których klucz wynosi k. |
|||
|---- |
|||
|iterator lower_bound(const key_type& k) const |
|||
|Znajduje pierwszy element, którego klucz jest nie mniejszy od k. |
|||
|---- |
|||
|iterator upper_bound(const key_type& k) const |
|||
|Znajduje pierwszy element, którego klucz jest większy od k. |
|||
|---- |
|||
|pair<iterator, iterator> |
|||
equal_range(const key_type& k) const |
|||
|Znajduje zakres zawierający wszystkie elementy o kluczu k. |
|||
|---- |
|||
|bool operator==(const set&, const set&) |
|||
|Sprawdza dwa zbiory pod względem równości. Jest to funkcja globalna, nie składnikowa. |
|||
|---- |
|||
|bool operator<(const set&,const set&) |
|||
|Porównanie leksykograficzne. Jest to funkcja globalna, nie składnikowa. |
|||
|---- |
|||
|} |
|||
<noinclude>{{Nawigacja|C++| |
<noinclude>{{Nawigacja|C++| |
Wersja z 13:21, 29 wrz 2010
Opis
Zbiory są jednym z kontenerów biblioteki STL, których struktura oparta jest na drzewach. Elementy które są w nich przechowywane są posortowane, według pewnego klucza.
Zarówno typ wartosci tych elementów jak i typ wartości klucza są takie same. Drzewiasta struktura zapewnia szybkie wyszukiwanie, jednak są z tym związane także pewne mankamenty, mianowicie modyfikacja elementu jest możliwa tylko w taki sposób, że kasujemy stary element, a następnie wstawiamy w to miejsce nowy.
Korzystając z terminologii STL-a zbiory sa tzw. kontenerami asocjacyjnymi (o zmiennej długości, pozwalającymi na operowanie elementami przy użyciu kluczy).
Prosty przykład
Opis użytych tu iteratorów znajduje się w rozdziale Iteratory.
#include <iostream>
#include <string>
#include <set>
using namespace std;
int main()
{
set<string> mapa;
mapa.insert("Lublin");
mapa.insert("Lódź");
mapa.insert("Warszawa");
mapa.insert("Kraków");
set<string>::iterator result, it;
// szuka elementu "Warszawa"
result = mapa.find("Warszawa");
if( result!=mapa.end() )
cout << "Znalazłem! " << *result<< '\n';
// wyświetlenie zawartości
for( it=mapa.begin(); it!=mapa.end(); ++it)
cout << *it<< '\n';
return 0;
}