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

Z Wikibooks, biblioteki wolnych podręczników.
< C++
Usunięta treść Dodana treść
Lethern (dyskusja | edycje)
m dr
Linia 55: Linia 55:
== Prosty Przykład ==
== Prosty Przykład ==


<source lang="cpp">
<code>
#include <iostream>
#include <iostream>
#include <string>
#include <string>
Linia 79: Linia 79:
return 0;
return 0;
}
}
</code>
</source>


== Składniki ==
== Składniki ==

Wersja z 15:25, 18 cze 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):

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

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ą.



Prosty Przykład

 #include <iostream>
 #include <string>
 #include <set>
 using namespace std;
 
 int main()
 {
   set<string> mapa;  //deklaracja zbioru mapa
   mapa.insert("Lublin");
   mapa.insert("Lódź");
   mapa.insert("Warszawa");
   mapa.insert("Kraków"); //dodawanie elementów
 
   set<string>::iterator marker = mapa.find("Warszawa"); //szuka elementu "Warszawa"
   if (marker!=mapa.end())
   {
     cout << "Znalazłem! " << *marker << endl;
   }
   for (marker=mapa.begin(); marker!=mapa.end(); marker++)
     cout << *marker << endl;
   system("pause");
   return 0;
 }

Składniki

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.