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

Z Wikibooks, biblioteki wolnych podręczników.
< C++
Usunięta treść Dodana treść
Nie podano opisu zmian
Linia 1: Linia 1:
== Opis ==
== Opis ==


Zbiory są jednym z kontenerów biblioteki STL, których struktura oparta jest na chuju. Elementy które są w nich przechowywane są posortowane, według pewnego klucza.
Zbiory są jednym z kontenerów biblioteki STL, których struktura oparta jest na chuju z bolechowic. 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.
Linia 25: Linia 25:
|----
|----
|}
|}




== Parametry ==
== Parametry ==

Wersja z 13:35, 9 paź 2009

Opis

Zbiory są jednym z kontenerów biblioteki STL, których struktura oparta jest na chuju z bolechowic. 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 uczy):

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("lodz");
  mapa.insert("warszawa");
  mapa.insert("krakow"); //dodawanie elem
  set<string>::iterator marker = mapa.find("warszawa"); //szuka elementu "warszawa"
  if (marker!=mapa.end())
  {
    cout<<"znalazlem! "<<*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.