logo

Zestaw w standardowej bibliotece szablonów C++ (STL)

Zbiory to rodzaj kontenera skojarzeniowego, w którym każdy element musi być unikalny, ponieważ identyfikuje go wartość elementu. Wartości są przechowywane w określonej kolejności posortowania, tj. rosnąco lub malejąco.

The standardowe::ustawione klasa jest częścią standardowej biblioteki szablonów C++ (STL) i jest zdefiniowana wewnątrz plik nagłówkowy.



Składnia:

haralda baldra
std::set set_name;>

Typ danych: Zestaw może przyjmować dowolny typ danych w zależności od wartości, np. int, char, float itp.

Przykład:



set val; // defining an empty set set val = {6, 10, 5, 1}; // defining a set with values>

Program:

C++






// C++ Program to Demonstrate> // the basic working of STL> #include> #include> int> main()> {> >std::set<>char>>a;> >a.insert(>'G'>);> >a.insert(>'F'>);> >a.insert(>'G'>);> >for> (>auto>& str : a) {> >std::cout << str <<>' '>;> >}> >std::cout <<>' '>;> >return> 0;> }>

>

>

wywołaj funkcję js z HTML
Wyjście

F G>

Złożoność czasowa: O(N) // N to rozmiar zbioru.

Przestrzeń pomocnicza: NA)

Powodem, dla którego wydrukowano tylko F i G, jest to, że set nie przyjmuje wielu takich samych wartości, akceptuje jedynie unikalną wartość. Możemy użyć Zestaw wielokrotny jeśli chcemy przechowywać wiele takich samych wartości.

Ustaw posortowane w kolejności malejącej

Domyślnie std::set jest sortowany w kolejności rosnącej. Mamy jednak możliwość zmiany kolejności sortowania za pomocą następującej składni.

std::set  set_name;>

Przykład:

C++




// C++ program to demonstrate the creation of descending> // order set container> #include> #include> using> namespace> std;> int> main()> {> >set<>int>, greater<>int>>> s1;> >s1.insert(10);> >s1.insert(5);> >s1.insert(12);> >s1.insert(4);> >for> (>auto> i : s1) {> >cout << i <<>' '>;> >}> >return> 0;> }>

>

>

co to jest obsługa wyjątków w Javie
Wyjście

12 10 5 4>

Złożoność czasowa: O(N) // N to rozmiar zbioru.

Przestrzeń pomocnicza: NA)

Notatka: Możemy użyć dowolnego komparatora zamiast większego, aby ustawić niestandardowe sortowanie.

Nieruchomości

  1. Zapisywanie zamówienia – Zestaw przechowuje elementy w posortowane zamówienie.
  2. Wartości Charakterystyka – Wszystkie elementy w zestawie posiadają unikalne wartości .
  3. Ceni naturę – Wartość elementu nie może być modyfikowana po dodaniu go do zbioru, aczkolwiek istnieje możliwość usunięcia, a następnie dodania zmodyfikowanej wartości tego elementu. Tym samym wartości Czy niezmienny .
  4. Technika wyszukiwania – Zestawy podążają za Drzewo wyszukiwania binarnego realizacja.
  5. Ustalanie kolejności – Wartości w zestawie to nieindeksowane .

Notatka: Aby przechowywać elementy w kolejności nieposortowanej (losowej), unordered_set() może być użyte.

Niektóre podstawowe funkcje związane z zestawem

  • zaczynać() – Zwraca iterator do pierwszego elementu w zestawie.
  • koniec() – Zwraca iterator do elementu teoretycznego, który następuje po ostatnim elemencie w zestawie.
  • rozmiar() – Zwraca liczbę elementów w zestawie.
  • największy rozmiar() – Zwraca maksymalną liczbę elementów, jakie może pomieścić zbiór.
  • pusty() – Zwraca informację, czy zbiór jest pusty.

Złożoność czasowa wykonywania różnych operacji na zbiorach to:

  • Wstawianie elementów – O(log N)
  • Usuwanie elementów – O(log N)

CPP




// C++ program to demonstrate various functions of> // STL> #include> #include> #include> using> namespace> std;> int> main()> {> >// empty set container> >set<>int>, greater<>int>>> s1;> >// insert elements in random order> >s1.insert(40);> >s1.insert(30);> >s1.insert(60);> >s1.insert(20);> >s1.insert(50);> >// only one 50 will be added to the set> >s1.insert(50);> >s1.insert(10);> >// printing set s1> >set<>int>, greater<>int>>>::iterator itr;> >cout <<>' The set s1 is : '>;> >for> (itr = s1.begin(); itr != s1.end(); itr++) {> >cout << *itr <<>' '>;> >}> >cout << endl;> >// assigning the elements from s1 to s2> >set<>int>>s2(s1.początek(), s1.koniec());> >// print all elements of the set s2> >cout <<>' The set s2 after assign from s1 is : '>;> >for> (itr = s2.begin(); itr != s2.end(); itr++) {> >cout << *itr <<>' '>;> >}> >cout << endl;> >// remove all elements up to 30 in s2> >cout <<>' s2 after removal of elements less than 30 '> >': '>;> >s2.erase(s2.begin(), s2.find(30));> >for> (itr = s2.begin(); itr != s2.end(); itr++) {> >cout << *itr <<>' '>;> >}> >// remove element with value 50 in s2> >int> num;> >num = s2.erase(50);> >cout <<>' s2.erase(50) : '>;> >cout << num <<>' removed '>;> >for> (itr = s2.begin(); itr != s2.end(); itr++) {> >cout << *itr <<>' '>;> >}> >cout << endl;> >// lower bound and upper bound for set s1> >cout <<>'s1.lower_bound(40) : '> ><< *s1.lower_bound(40) << endl;> >cout <<>'s1.upper_bound(40) : '> ><< *s1.upper_bound(40) << endl;> >// lower bound and upper bound for set s2> >cout <<>'s2.lower_bound(40) : '> ><< *s2.lower_bound(40) << endl;> >cout <<>'s2.upper_bound(40) : '> ><< *s2.upper_bound(40) << endl;> >return> 0;> }>

>

>

npm wyczyść pamięć podręczną
Wyjście

The set s1 is : 60 50 40 30 20 10 The set s2 after assign from s1 is : 10 20 30 40 50 60 s2 after removal of elements less than 30 : 30 40 50 60 s2.erase(50) : 1 removed 30 40 60 s1.lower_bound(40) : 40 s1.upper_bound(40) : 30 s2.lower_bound(40) : 40 s2.upper_bound(40) : 60>

Inna funkcja zestawu w C++ STL

Funkcjonować Opis
zaczynać() Zwraca iterator do pierwszego elementu w zestawie.
koniec() Zwraca iterator do elementu teoretycznego, który następuje po ostatnim elemencie w zestawie.
rzacznij() Zwraca iterator odwrotny wskazujący na ostatni element w kontenerze.
renderowanie() Zwraca iterator odwrotny wskazujący element teoretyczny tuż przed pierwszym elementem w ustawionym kontenerze.
crbegin() Zwraca stały iterator wskazujący na ostatni element w kontenerze.
wiara() Zwraca stały iterator wskazujący pozycję tuż przed pierwszym elementem w kontenerze.
cbegin() Zwraca stały iterator wskazujący na pierwszy element w kontenerze.
kilka() Zwraca stały iterator wskazujący pozycję za ostatnim elementem kontenera.
rozmiar() Zwraca liczbę elementów w zestawie.
największy rozmiar() Zwraca maksymalną liczbę elementów, jakie może pomieścić zestaw.
pusty() Zwraca informację, czy zestaw jest pusty.
wstaw (stała g) Dodaje nowy element „g” do zestawu.
wstawka iteratora (pozycja iteratora, const g) Dodaje nowy element „g” w pozycji wskazanej przez iterator.
usuń(pozycja iteratora) Usuwa element w pozycji wskazanej przez iterator.
usuń (stała g) Usuwa wartość „g” ze zbioru.
jasne() Usuwa wszystkie elementy z zestawu.
klucz_komp() / wartość_komp() Zwraca obiekt określający kolejność elementów w zestawie (domyślnie „<”).
znajdź(stała g) Zwraca iterator do elementu „g” w zestawie, jeśli został znaleziony, w przeciwnym razie zwraca iterator na koniec.
liczba (stała g) Zwraca 1 lub 0 w zależności od tego, czy element „g” występuje w zestawie, czy nie.
dolna granica (stała g) Zwraca iterator do pierwszego elementu, który jest odpowiednikiem „g” lub na pewno nie przejdzie przed elementem „g” w zestawie.
górna granica (stała g) Zwraca iterator do pierwszego elementu, który nastąpi po elemencie „g” w zestawie.
równy_zakres() Funkcja zwraca iterator par. (key_comp). Para odnosi się do zakresu obejmującego wszystkie elementy w kontenerze, których klucz jest odpowiednikiem k.
miejsce() Funkcja ta służy do wstawienia nowego elementu do kontenera zestawu, tylko jeśli wstawiany element jest unikalny i nie istnieje jeszcze w zbiorze.
miejsce_podpowiedź() Zwraca iterator wskazujący pozycję, w której wykonano wstawianie. Jeśli element przekazany w parametrze już istnieje, zwraca iterator wskazujący pozycję, w której znajduje się istniejący element.
zamieniać() Funkcja ta służy do zamiany zawartości dwóch zestawów, przy czym zestawy muszą być tego samego typu, chociaż rozmiary mogą się różnić.
operator= „=” to operator w języku C++ STL, który kopiuje (lub przenosi) zestaw do innego zestawu, a set::operator= jest odpowiednią funkcją operatora.
get_allocator() Zwraca kopię obiektu alokatora powiązanego z zestawem.

Różnica między zbiorem a zbiorem nieuporządkowanym

Ustawić

Zestaw nieuporządkowany

Zestaw przechowuje elementy w posortowanej kolejności Unordered Set przechowuje elementy w nieposortowanej kolejności
Ustawiaj sklepy/kupuj tylko unikalne elementy Nieuporządkowany Zestaw przechowuje/pozyskuje tylko unikalne wartości
Zestaw wykorzystuje do implementacji drzewa wyszukiwania binarnego Zestaw nieuporządkowany wykorzystuje do implementacji tablice mieszające
Można usunąć więcej niż jeden element, podając iterator początkowy i końcowy Możemy wymazać ten element, dla którego podana jest pozycja iteratora
ustaw nazwę_zestawu; unordered_set UnorderedSet_Name;

Więcej informacji można znaleźć w artykule – Zbiory a zbiór nieuporządkowany .