C++/Set: Różnice pomiędzy wersjami
m dr |
Nie podano opisu zmian |
||
Linia 50: | Linia 50: | ||
⚫ | |||
Opis użytych tu iteratorów znajduje się w rozdziale [[C%2B%2B/Iteratory|Iteratory]]. |
|||
⚫ | |||
<source lang="cpp"> |
<source lang="cpp"> |
||
#include <iostream> |
|||
#include <string> |
|||
#include <set> |
|||
using namespace std; |
|||
int main() |
|||
{ |
|||
set<string> mapa; |
set<string> mapa; |
||
mapa.insert("Lublin"); |
mapa.insert("Lublin"); |
||
mapa.insert("Lódź"); |
mapa.insert("Lódź"); |
||
mapa.insert("Warszawa"); |
mapa.insert("Warszawa"); |
||
mapa.insert("Kraków"); |
mapa.insert("Kraków"); |
||
set<string>::iterator |
set<string>::iterator result, it; |
||
// szuka elementu "Warszawa" |
|||
result = mapa.find("Warszawa"); |
|||
if( result!=mapa.end() ) |
|||
{ |
|||
cout << "Znalazłem! " << * |
cout << "Znalazłem! " << *result<< '\n'; |
||
} |
|||
// wyświetlenie zawartości |
|||
for |
for( it=mapa.begin(); it!=mapa.end(); ++it) |
||
cout << * |
cout << *it<< '\n'; |
||
system("pause"); |
|||
return 0; |
return 0; |
||
} |
|||
</source> |
</source> |
||
Wersja z 12:08, 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):
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
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;
}
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. |