Rinkiniai yra asociatyvaus konteinerio tipas, kuriame kiekvienas elementas turi būti unikalus, nes elemento reikšmė jį identifikuoja. Vertės saugomos tam tikra rūšiavimo tvarka, t. y. didėjančia arba mažėjančia tvarka.
The std::set klasė yra C++ standartinės šablonų bibliotekos (STL) dalis ir ji apibrėžta viduje antraštės failą.
Sintaksė:
kartografavimas mašinraščiu
std::set set_name;>
Duomenų tipas: Rinkinys gali būti bet kokio tipo duomenų, priklausomai nuo reikšmių, pvz. int, char, float ir kt.
Pavyzdys:
set val; // defining an empty set set val = {6, 10, 5, 1}; // defining a set with values> Programa:
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;> }> |
>
>Išvestis
F G>
Laiko sudėtingumas: O(N) // N yra rinkinio dydis.
Pagalbinė erdvė: O(N)
Priežastis, dėl kurios buvo spausdinama tik F ir G, yra ta, kad rinkinyje nėra kelių tų pačių verčių, jis priima tik unikalią reikšmę. Galime naudoti Multiset jei norime išsaugoti kelias tas pačias reikšmes.
Rinkinys surūšiuotas mažėjančia tvarka
Pagal numatytuosius nustatymus std::set yra rūšiuojamas didėjančia tvarka. Tačiau mes turime galimybę pakeisti rūšiavimo tvarką naudodami šią sintaksę.
std::set set_name;>
Pavyzdys:
C++
verilog visada
// 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;> }> |
>
>Išvestis
12 10 5 4>
Laiko sudėtingumas: O(N) // N yra rinkinio dydis.
Pagalbinė erdvė: O(N)
Pastaba: Vietoj didesnio galime naudoti bet kurį palyginiklį, kad pateiktume pasirinktinį užsakymo rūšiavimą.
Savybės
- Užsakymo saugojimas – Rinkinyje saugomi elementai surūšiuoti įsakymas.
- Vertybės Charakteristikos – Turi visus rinkinio elementus unikalios vertybės .
- Vertybės Gamta – Elemento vertės negalima keisti, kai jis pridedamas prie rinkinio, nors galima pašalinti ir pridėti pakeistą to elemento vertę. Taigi, vertybės yra nekintamas .
- Paieškos technika – Rinkiniai seka Dvejetainis paieškos medis įgyvendinimas.
- Užsakymo sudarymas – Rinkinio vertės yra neindeksuotas .
Pastaba: Norėdami išsaugoti elementus nerūšiuota (atsitiktine) tvarka, unordered_set() Gali būti naudojamas.
Kai kurios pagrindinės funkcijos, susijusios su rinkiniu
- pradėti () – Grąžina iteratorių į pirmąjį rinkinio elementą.
- galas() – Grąžina iteratorių į teorinį elementą, kuris eina po paskutinio rinkinio elemento.
- dydis () – Grąžina rinkinio elementų skaičių.
- maksimalus_dydis() – Grąžina maksimalų elementų skaičių, kurį gali turėti rinkinys.
- tuščia() – Grąžina, ar rinkinys tuščias.
Laiko sudėtingumas atliekant įvairias operacijas rinkiniuose yra toks:
- Elementų įterpimas – O(log N)
- Elementų ištrynimas – O(log N)
CPP
priegloba Linux
// 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>>>::iteratorius 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 išvalyti talpykląIšvestis
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>
Skirtinga C++ STL rinkinio funkcija
| Funkcija | apibūdinimas |
|---|---|
| pradėti () | Grąžina iteratorių į pirmąjį rinkinio elementą. |
| galas() | Grąžina iteratorių į teorinį elementą, kuris eina po paskutinio rinkinio elemento. |
| rbegin () | Grąžina atvirkštinį iteratorių, nukreipiantį į paskutinį konteinerio elementą. |
| pateikti () | Grąžina atvirkštinį iteratorių, nukreipiantį į teorinį elementą prieš pat pirmąjį elementą nustatytos sudėties rodinyje. |
| crbegin () | Grąžina pastovų iteratorių, nukreipiantį į paskutinį konteinerio elementą. |
| tikėjimas () | Grąžina pastovų iteratorių, nukreipiantį į vietą prieš pat pirmąjį konteinerio elementą. |
| cbegin() | Grąžina pastovų iteratorių, nukreipiantį į pirmąjį konteinerio elementą. |
| keletas() | Grąžina pastovų iteratorių, nurodantį vietą už paskutinio konteinerio elemento. |
| dydis () | Grąžina rinkinio elementų skaičių. |
| maksimalus_dydis() | Grąžina maksimalų elementų skaičių, kurį gali turėti rinkinys. |
| tuščia() | Grąžina, ar rinkinys tuščias. |
| įterpti (const g) | Prie rinkinio pridedamas naujas elementas „g“. |
| iteratoriaus įdėklas (iteratoriaus padėtis, konst g) | Prideda naują elementą „g“ iteratoriaus nurodytoje vietoje. |
| ištrinti (iteratoriaus padėtis) | Pašalina elementą iteratoriaus nurodytoje vietoje. |
| ištrinti (konst g) | Pašalina reikšmę „g“ iš rinkinio. |
| aišku () | Pašalina visus elementus iš rinkinio. |
| key_comp() / value_comp() | Grąžina objektą, kuris nustato rinkinio elementų išdėstymą (pagal numatytuosius nustatymus „<“). |
| rasti (const g) | Grąžina iteratorių į elementą „g“ rinkinyje, jei jis rastas, kitu atveju grąžina iteratorių į pabaigą. |
| skaičius (konst g) | Grąžina 1 arba 0, atsižvelgiant į tai, ar elementas „g“ yra rinkinyje, ar ne. |
| apatinė_riba(const g) | Grąžina iteratorių į pirmąjį elementą, kuris atitinka „g“ arba tikrai nebus prieš elementą „g“ rinkinyje. |
| viršutinė_riba(konst g) | Grąžina iteratorių į pirmąjį elementą, kuris eis po elemento „g“ rinkinyje. |
| equal_range() | Funkcija grąžina porų iteratorių. (key_comp). Pora nurodo diapazoną, apimantį visus konteinerio elementus, kurių raktas atitinka k. |
| emplace () | Ši funkcija naudojama naujam elementui įterpti į rinkinio konteinerį, tik jei įterpiamas elementas yra unikalus ir jo rinkinyje dar nėra. |
| emplace_hint() | Grąžina iteratorių, nukreipiantį į vietą, kurioje atliktas įterpimas. Jei elementas, perduotas parametre, jau egzistuoja, jis grąžina iteratorių, nurodantį vietą, kurioje yra esamas elementas. |
| apsikeitimas () | Ši funkcija naudojama keistis dviejų rinkinių turiniu, tačiau rinkiniai turi būti to paties tipo, nors dydžiai gali skirtis. |
| operatorius= | „=“ yra C++ STL operatorius, kuris kopijuoja (arba perkelia) rinkinį į kitą rinkinį, o set::operator= yra atitinkama operatoriaus funkcija. |
| get_allocator() | Grąžina su rinkiniu susieto skirstytuvo objekto kopiją. |
Skirtumas tarp rinkinio ir netvarkingo rinkinio
| Nustatyti | Neužsakytas rinkinys |
|---|---|
| Nustatyti parduotuvių elementus rūšiuojama tvarka | Netvarkingas rinkinys saugo elementus nerūšiuota tvarka |
| Nustatykite parduotuves / įsigykite tik unikalius elementus | Netvarkingas Nustatyti saugomi/įgyti tik unikalias vertes |
| Įdiegimui rinkinys naudoja dvejetainius paieškos medžius | Netvarkingas rinkinys įgyvendinimui naudoja maišos lenteles |
| Nurodant pradžios ir pabaigos iteratorių, galima ištrinti daugiau nei vieną elementą | Galime ištrinti tą elementą, kuriam suteikta iteratoriaus padėtis |
| nustatyti Set_Name; | unordered_set UnorderedSet_Name; |
Norėdami gauti daugiau informacijos, galite perskaityti straipsnį - Rinkiniai prieš netvarkingą rinkinį .