logo

Nastaveno v C++ Standard Template Library (STL)

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

  1. Uložení objednávky - Sada ukládá prvky do seřazeno objednat.
  2. Hodnoty Charakteristika – Všechny prvky v sadě mají jedinečné hodnoty .
  3. 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ý .
  4. Technika vyhledávání – Sady následují Binární vyhledávací strom implementace.
  5. 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 .