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 HTMLWyjś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 JavieWyjś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
- Zapisywanie zamówienia – Zestaw przechowuje elementy w posortowane zamówienie.
- Wartości Charakterystyka – Wszystkie elementy w zestawie posiadają unikalne wartości .
- 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 .
- Technika wyszukiwania – Zestawy podążają za Drzewo wyszukiwania binarnego realizacja.
- 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 .