Udostępnij za pośrednictwem


set — Klasa

Zestaw klasy kontenera STL jest używany do przechowywania i pobierania danych z kolekcji, w której wartości zawartych elementów są unikatowe, i które służą jako wartości klucza, zgodnie z którymi dane są automatycznie porządkowane.Nie można bezpośrednio zmienić wartości elementu w zestawie.Zamiast tego musisz usunąć stare wartości i wstawić elementy z nowymi wartościami.

template <
    class Key, 
    class Traits=less<Key>, 
    class Allocator=allocator<Key> 
>
class set

Parametry

  • Key
    Typ danych elementu, który ma być przechowywany w zestawie.

  • Traits
    Typ, który dostarcza obiekt funkcji, która może porównać dwie wartości elementów jako klucze sortowania, aby określić ich względną kolejność w zestawie.Ten argument jest opcjonalny, a predykat binarny mniej <Klucz> jest wartością domyślną.

  • Allocator
    Typ reprezentujący przechowywany obiekt alokatora, który hermetyzuje szczegóły dotyczące alokacji zestawu i dezalokacji pamięci.Ten argument jest opcjonalny, a jego wartość domyślna to alokator*<>Klucz*

Uwagi

Zestaw STL jest:

  • Kontenerem asocjacyjnym, który jest kontenerem o zmiennym rozmiarze, obsługującym efektywne pobieranie wartości elementu w oparciu o wartość skojarzonego klucza.Ponadto, jest prostym kontenerem asocjacyjnym, ponieważ jego wartości elementu są jego wartościami klucza.

  • Odwracalny, ponieważ zapewnia dwukierunkowy iterator do dostępu do jego elementów.

  • Posortowany, ponieważ jego elementy są uporządkowane według wartości kluczy w kontenerze zgodnie z określoną funkcją porównywania.

  • Unikatowy w tym sensie, że każdy z jego elementów musi mieć unikatowy klucz.Ponieważ zestaw jest również prostym kontenerem asocjacyjnym, jego elementy są również unikatowe.

Zestaw jest też opisany jako klasa szablonu, ponieważ funkcjonalność, którą zapewnia, jest generyczna i dlatego niezależna od określonego typu danych zawartych jako elementy.Typ danych, który ma być użyty, jest zamiast tego określony jako parametr w klasie szablonu wraz z funkcją porównania i alokatorem.

Wybór typu kontenera powinien ogólnie być oparty o typ wyszukiwania i wstawiania wymagany przez aplikację.Kontenery asocjacyjne są zoptymalizowane dla operacji wyszukiwania, wstawiania oraz usuwania.Funkcje elementów członkowskich, które jawnie obsługują te operacje, są skuteczne, wykonując je w czasie, który jest średnio proporcjonalny do logarytmu liczby elementów w kontenerze.Wstawianie elementów nie unieważnia iteratorów, a usuwanie elementów unieważnia tylko te iteratory, które w szczególności wskazywały na usunięte elementy.

Zestaw powinien być kontenerem asocjacyjnym z wyboru, gdy warunki kojarzenia wartości z kluczami są spełnione przez aplikację.Elementy zestawu są unikatowe i służą jako ich własne klucze sortowania.Model dla tego typu konstrukcji jest uporządkowaną listą, np. wyrazów, w których wyrazy mogą występować tylko raz.Jeżeli zezwolono na wiele wystąpień wyrazów, odpowiednią strukturą kontenera będzie multiset.Gdyby wartości potrzebowały dołączenia do listy unikatowych słów kluczowych, mapa byłaby odpowiednią strukturą zawierającą te dane.Gdyby natomiast klucze nie były unikatowe, mapa wielokrotna byłaby kontenerem z wyboru.

Zestaw porządkuje sekwencję, którą kontroluje, przez wywołanie przechowywanego obiektu funkcji typu key_compare.Ten przechowywany obiekt jest funkcją porównywania, która może być dostępna poprzez wywołanie funkcji elementu członkowskiego key_comp.Ogólnie rzecz biorąc, elementy muszą być nieco mniej porównywalne, aby ustalić kolejność, tak aby, mając dowolne dwa elementy, można było określić, czy są one równoważne (w sensie, żaden nie jest mniejszy niż ten drugi) lub, że jeden jest mniejszy niż ten drugi.Skutkuje to ustaleniem kolejności dla elementów nierównoważnych.Ze strony bardziej technicznej, funkcja porównywania jest predykatem binarnym, który wymusza ścisłe słabe porządkowanie w standardowym sensie matematycznym.Binarny predykat f(x,y) jest obiektem funkcji, która ma dwa obiekty argumentu x i y oraz wartość zwracaną true lub false.Kolejność nałożona na zestaw jest ścisłym słabym porządkowaniem, jeśli predykat binarny jest niezwrotny, przeciwsymetryczny i przechodni oraz jeśli równoważność jest przechodnia, gdzie dwa obiekty x i y są zdefiniowane jako równoważne, gdy zarówno f(x,y), jak i f(y,x) mają wartość false.Jeśli silniejszy warunek równości pomiędzy kluczami zastąpi ten równoważności, to porządkowanie będzie całkowite (w sensie, że wszystkie elementy są uporządkowane względem siebie), a dopasowane klucze będą od siebie nieodróżnialne.

Iterator dostarczony przez klasę zestawu jest iteratorem dwukierunkowym, ale funkcje elementów członkowskich klasy insert i set mają wersje przyjmujące jako parametry szablonu słabszy iterator danych wejściowych, którego wymagania funkcjonalności są mniejsze niż te gwarantowane przez klasę iteratorów dwukierunkowych.Pojęcia innych iteratorów formują rodzinę powiązaną przez udoskonalenia w ich funkcjonalnościach.Każde pojęcie iteratora ma swój własny zestaw wymagań, a algorytmy z nimi pracujące muszą ograniczać swoje założenia co do wymagań dostarczonych przez tego typu iterator.Można założyć, że z iteratora danych wejściowych można usunąć odwołanie, aby odwołać się do obiektu, a także, że może on być zwiększony do następnego iteratora w sekwencji.Jest to minimalny zestaw funkcjonalności, ale jest wystarczający, aby można było mówić znacząco o zakresie iteratorów [First, Last) w kontekście funkcji członkowskich klasy.

Konstruktory

set

Konstruuje zestaw, który jest pusty lub jest kopią całości lub części innego zestawu.

Typedefs

allocator_type

Typ, który reprezentuje klasę allocator dla obiektu zestawu.

const_iterator

Typ, który dostarcza iterator dwukierunkowy, który może odczytać element const w zestawie.

const_pointer

Typ, który dostarcza wskaźnik do elementu const w zestawie.

const_reference

Typ, który dostarcza odwołanie do elementu const przechowywanego w zestawie w celu odczytu i wykonywania operacji const.

const_reverse_iterator

Typ, który dostarcza iterator dwukierunkowy, który może odczytać dowolny element const w zestawie.

difference_type

Typ liczby całkowitej ze znakiem, który może służyć do reprezentowania liczby elementów zestawu w zakresie pomiędzy elementami wskazywanymi przez iteratory.

iterator

Typ, który dostarcza iterator dwukierunkowy do odczytu i modyfikacji dowolnego elementu w zestawie.

key_compare

Typ, który dostarcza obiekt funkcji, która może porównać dwa klucze sortowania, aby określić względną kolejność dwóch elementów w zestawie.

key_type

Typ opisuje obiekt zapisany jako element zestawu w charakterze klucza sortowania.

pointer

Typ, który dostarcza wskaźnik do elementu w zestawie.

reference

Typ, który zawiera odwołanie do elementu przechowywanego w zestawie.

reverse_iterator

Typ, który dostarcza iterator dwukierunkowy do odczytu i modyfikacji elementu w odwróconym zestawie.

size_type

Typ całkowitoliczbowy bez znaku, który może reprezentować liczbę elementów w zestawie.

value_compare

Typ, który dostarcza obiekt funkcji, która może porównać dwa elementy jako klucze sortowania, aby określić ich względną kolejność w zestawie.

value_type

Typ opisuje obiekt zapisany jako element zestawu w charakterze wartości.

Funkcje elementów członkowskich

begin

Zwraca iterator, który dotyczy pierwszego elementu w zestawie.

cbegin

Zwraca iterator const, który dotyczy pierwszego elementu w zestawie.

cend

Zwraca iterator const, który dotyczy lokalizacji następującej po ostatnim elemencie w zestawie.

clear

Usuwa wszystkie elementy zestawu.

count

Zwraca liczbę elementów w zestawie, których klucz pasuje do klucza określonego jako parametr.

crbegin

Zwraca iterator const, który dotyczy pierwszego elementu w odwróconym zestawie.

crend

Zwraca iterator const, który dotyczy lokalizacji następującej po ostatnim elemencie w odwróconym zestawie.

emplace

Wstawia element skonstruowany w miejscu do zestawu.

emplace_hint

Wstawia element skonstruowany w miejscu do zestawu, ze wskazówką położenia.

empty

Sprawdza, czy zestaw jest pusty.

end

Zwraca iterator odnoszący się do lokalizacji następującej po ostatnim elemencie w zestawie.

equal_range

Zwraca parę iteratorów odpowiednio do pierwszego elementu w zestawie przy użyciu klucza, który jest większy niż określony klucz, i do pierwszego elementu w zestawie przy użyciu klucza, który jest równy lub większy niż ten klucz.

erase

Usuwa element lub zakres elementów w zestawie z określonych pozycji lub usuwa elementy, które odpowiadają określonemu kluczowi.

find

Zwraca iterator odnoszący się do pierwszej lokalizacji elementu w zestawie, który ma klucz równoważny z określonym kluczem.

get_allocator

Zwraca kopię obiektu allocator użytego do stworzenia zestawu.

insert

Wstawia element lub zakres elementów do zestawu.

key_comp

Pobiera kopię obiektu porównania użytego do uporządkowania kluczy w zestawie.

lower_bound

Zwraca iterator do pierwszego elementu w zestawie, z kluczem, który jest równy lub większy od określonego klucza.

max_size

Zwraca maksymalną długość zestawu.

rbegin

Zwraca iterator odnoszący się do pierwszego elementu w odwróconym zestawie.

rend

Zwraca iterator odnoszący się do lokalizacji następującej po ostatnim elemencie w odwróconym zestawie.

size

Zwraca liczbę elementów w zestawie.

swap

Zamienia elementy z dwóch zestawów.

upper_bound

Zwraca iterator do pierwszego elementu w zestawie z kluczem, który jest większy od określonego klucza.

value_comp

Pobiera kopię obiektu porównania, użytego do uporządkowania wartości elementów w zestawie.

Operatory

operator=

Zastępuje elementy zestawu kopią innego zestawu.

Wymagania

Nagłówek: <set>

Przestrzeń nazw: std

Zobacz też

Informacje

<set>

Bezpieczeństwo wątku w standardowej bibliotece C++

Standardowa biblioteka szablonów

Koncepcje

Kontenery