Sady jsou typem asociativního kontejneru, ve kterém musí být každý prvek jedinečný, protože ho identifikuje hodnota prvku. Hodnoty jsou uloženy ve specifickém pořadí, tj. buď vzestupně nebo sestupně.
The std::set třída je součástí C++ Standard Template Library (STL) a je definována uvnitř hlavičkový soubor.
Syntax:
system.out.println
std::set set_name;>
Datový typ: Sada může mít libovolný datový typ v závislosti na hodnotách, např. int, char, float atd.
Příklad:
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;> }> |
>
>Výstup
F G>
Časová složitost: O(N) // N je velikost sady.
Pomocný prostor: NA)
Důvod, proč vytiskl pouze F a G, je ten, že sada nenabírá více stejných hodnot, ale přijímá pouze jedinečnou hodnotu. Můžeme použít Multiset pokud chceme uložit více stejných hodnot.
Nastavit Seřazeno v sestupném pořadí
Ve výchozím nastavení je std::set seřazeny vzestupně. Máme však možnost změnit pořadí řazení pomocí následující syntaxe.
std::set set_name;>
Příklad:
C++
python rstrip
// 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;> }> |
>
>Výstup
12 10 5 4>
Časová složitost: O(N) // N je velikost sady.
výukový program programovacího jazyka java
Pomocný prostor: NA)
Poznámka: Můžeme použít jakýkoli komparátor namísto většího, abychom mohli nastavit vlastní řazení.
Vlastnosti
- Uložení objednávky - Sada ukládá prvky do seřazeno objednat.
- Hodnoty Charakteristika – Všechny prvky v sadě mají jedinečné hodnoty .
- Hodnoty Příroda – Hodnotu prvku nelze změnit, jakmile je přidán do sady, je však možné odebrat a poté přidat upravenou hodnotu tohoto prvku. Tedy hodnoty jsou neměnný .
- Technika vyhledávání – Sady následují Binární vyhledávací strom implementace.
- Vyřízení objednávky - Hodnoty v sadě jsou neindexované .
Poznámka: Chcete-li uložit prvky v netříděném (náhodném) pořadí, unordered_set() může být použito.
Některé základní funkce spojené se sadou
- začít() – Vrátí iterátor na první prvek v sadě.
- konec() – Vrátí iterátor teoretického prvku, který následuje za posledním prvkem v sadě.
- velikost() – Vrátí počet prvků v sadě.
- max_size() – Vrátí maximální počet prvků, které sada pojme.
- prázdný() – Vrací, zda je sada prázdná.
Časová složitost pro provádění různých operací na množinách je:
- Vkládání prvků – O(log N)
- Mazání prvků – 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.begin(), s1.end());> >// 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 vymazat mezipaměťVýstup
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>
Odlišná funkce množiny v C++ STL
| Funkce | Popis |
|---|---|
| začít() | Vrátí iterátor na první prvek v sadě. |
| konec() | Vrátí iterátor teoretického prvku, který následuje za posledním prvkem v sadě. |
| rbegin() | Vrátí zpětný iterátor ukazující na poslední prvek v kontejneru. |
| poskytnout() | Vrátí zpětný iterátor ukazující na teoretický prvek těsně před prvním prvkem v kontejneru sady. |
| crbegin() | Vrátí konstantní iterátor ukazující na poslední prvek v kontejneru. |
| Crend() | Vrátí konstantní iterátor ukazující na pozici těsně před prvním prvkem v kontejneru. |
| cbegin() | Vrátí konstantní iterátor ukazující na první prvek v kontejneru. |
| trochu() | Vrátí konstantní iterátor ukazující na pozici za posledním prvkem v kontejneru. |
| velikost() | Vrátí počet prvků v sadě. |
| max_size() | Vrátí maximální počet prvků, které může množina pojmout. |
| prázdný() | Vrací, zda je sada prázdná. |
| vložit (konst g) | Přidá do sady nový prvek ‚g‘. |
| vložka iterátoru (pozice iterátoru, const g) | Přidá nový prvek ‚g‘ na pozici, na kterou ukazuje iterátor. |
| vymazat (pozice iterátoru) | Odebere prvek na pozici, na kterou ukazuje iterátor. |
| vymazat (konst g) | Odebere hodnotu ‚g‘ ze sady. |
| Průhledná() | Odebere všechny prvky ze sady. |
| key_comp() / value_comp() | Vrátí objekt, který určuje, jak jsou prvky v sadě uspořádány (ve výchozím nastavení ‚<‘). |
| najít (konst g) | Vrátí iterátor prvku ‚g‘ v sadě, pokud je nalezen, jinak vrátí iterátor na konec. |
| počítat (konst g) | Vrátí 1 nebo 0 podle toho, zda je prvek ‚g‘ v sadě přítomen či nikoli. |
| dolní_mez(konst g) | Vrátí iterátor k prvnímu prvku, který je ekvivalentní „g“ nebo rozhodně nebude před prvkem „g“ v sadě. |
| horní_mez(konst g) | Vrátí iterátor na první prvek, který bude následovat po prvku ‚g‘ v sadě. |
| stejný_rozsah() | Funkce vrací iterátor párů. (key_comp). Dvojice odkazuje na rozsah, který zahrnuje všechny prvky v kontejneru, které mají klíč ekvivalentní k. |
| umístit() | Tato funkce se používá pro vložení nového prvku do kontejneru sady, pouze pokud je prvek, který se má vložit, jedinečný a v sadě již neexistuje. |
| emplace_hint() | Vrátí iterátor ukazující na pozici, kde bylo vložení provedeno. Pokud prvek předaný v parametru již existuje, vrátí iterátor ukazující na pozici, kde je existující prvek. |
| swap() | Tato funkce se používá k výměně obsahu dvou sad, ale sady musí být stejného typu, i když velikosti se mohou lišit. |
| operátor= | ‚=‘ je operátor v C++ STL, který zkopíruje (nebo přesune) sadu do jiné sady a set::operator= je odpovídající operátorská funkce. |
| get_allocator() | Vrátí kopii objektu alokátoru přidruženého k sadě. |
Rozdíl mezi sadou a neuspořádanou sadou
| Soubor | Neuspořádaná sada |
|---|---|
| Sada ukládá prvky v seřazeném pořadí | Neuspořádaná sada ukládá prvky v neseřazeném pořadí |
| Nastavte pouze ukládání/získávejte jedinečné prvky | Neuspořádaná sada ukládá/získává pouze jedinečné hodnoty |
| Sada používá k implementaci binární vyhledávací stromy | Unordered Set používá k implementaci hash tabulky |
| Zadáním počátečního a koncového iterátoru lze vymazat více než jeden prvek | Můžeme vymazat ten prvek, pro který je daná pozice iterátoru |
| set Název_sady; | unordered_set UnorderedSet_Name; |
Více informací naleznete v článku – Sady vs Neuspořádaná sada .