Joukot ovat assosiatiivisia säilöjä, joissa jokaisen elementin on oltava yksilöllinen, koska elementin arvo tunnistaa sen. Arvot tallennetaan tietyssä lajittelujärjestyksessä, eli joko nousevassa tai laskevassa järjestyksessä.
The std::set luokka on osa C++ Standard Template Library (STL) -kirjastoa ja se on määritetty sisällä otsikkotiedosto.
Syntaksi:
yksinkertainen päivämäärän muotoiluohjelma javassa
std::set set_name;>
Tietotyyppi: Joukko voi ottaa minkä tahansa tietotyypin arvoista riippuen, esim. int, char, float jne.
Esimerkki:
set val; // defining an empty set set val = {6, 10, 5, 1}; // defining a set with values> Ohjelmoida:
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;> }> |
>
mikä on regex java
>Lähtö
F G>
Aika monimutkaisuus: O(N) // N on joukon koko.
Aputila: PÄÄLLÄ)
Syy, miksi se tulostaa vain F:n ja G:n, on se, että joukko ei ota useita samoja arvoja, vaan hyväksyy vain yksilöllisen arvon. Voimme käyttää Multiset jos haluamme tallentaa useita samoja arvoja.
Sarja lajiteltu laskevaan järjestykseen
Oletusarvoisesti std::set lajitellaan nousevaan järjestykseen. Meillä on kuitenkin mahdollisuus muuttaa lajittelujärjestystä käyttämällä seuraavaa syntaksia.
std::set set_name;>
Esimerkki:
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;> }> |
css-keskipainike
>
>Lähtö
12 10 5 4>
Aika monimutkaisuus: O(N) // N on joukon koko.
Aputila: PÄÄLLÄ)
Huomautus: Voimme käyttää mitä tahansa vertailijaa suuremman sijaan antaaksemme joukon mukautetun järjestyksen lajittelun.
Ominaisuudet
- Tilauksen säilytys - Setti tallentaa elementit sisään lajiteltu Tilaus.
- Arvot Ominaisuudet – Kaikilla sarjan elementeillä on ainutlaatuisia arvoja .
- Arvot luonto – Elementin arvoa ei voi muuttaa, kun se on lisätty joukkoon, vaikka kyseisen elementin muokattu arvo voidaan poistaa ja sitten lisätä. Arvot siis ovat muuttumaton .
- Hakutekniikka – Sarjat seuraavat Binäärihakupuu toteutus.
- Järjestä tilaus - Sarjan arvot ovat indeksoimaton .
Huomautus: Jos haluat tallentaa elementit lajittelemattomassa (satunnaisessa) järjestyksessä, unordered_set() voidaan käyttää.
Jotkut sarjaan liittyvät perustoiminnot
- alkaa() – Palauttaa iteraattorin joukon ensimmäiseen elementtiin.
- loppu () – Palauttaa iteraattorin teoreettiseen elementtiin, joka seuraa joukon viimeistä elementtiä.
- koko() – Palauttaa joukon elementtien määrän.
- max_size() – Palauttaa enimmäismäärän elementtejä, jotka joukko voi sisältää.
- tyhjä() – Palauttaa, onko sarja tyhjä.
Aika monimutkaisuus erilaisten toimintojen tekemiseen sarjoissa on:
- Elementtien lisääminen - O(log N)
- Elementtien poistaminen – 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 tyhjennä välimuistiLähtö
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>
Asetuksen eri toiminto C++ STL:ssä
| Toiminto | Kuvaus |
|---|---|
| alkaa() | Palauttaa iteraattorin joukon ensimmäiseen elementtiin. |
| loppu () | Palauttaa iteraattorin teoreettiseen elementtiin, joka seuraa joukon viimeistä elementtiä. |
| rbegin() | Palauttaa käänteisen iteraattorin, joka osoittaa säilön viimeiseen elementtiin. |
| render() | Palauttaa käänteisen iteraattorin, joka osoittaa teoreettiseen elementtiin juuri ennen ensimmäistä elementtiä sarjasäiliössä. |
| crbegin() | Palauttaa vakioiteraattorin, joka osoittaa säilön viimeiseen elementtiin. |
| crend() | Palauttaa vakioiteraattorin, joka osoittaa sijaintiin juuri ennen ensimmäistä elementtiä säiliössä. |
| cbegin() | Palauttaa vakioiteraattorin, joka osoittaa säilön ensimmäiseen elementtiin. |
| muutama() | Palauttaa vakioiteraattorin, joka osoittaa säiliön viimeisen elementin jälkeen olevaan kohtaan. |
| koko() | Palauttaa joukon elementtien määrän. |
| max_size() | Palauttaa enimmäismäärän elementtejä, jotka joukko voi sisältää. |
| tyhjä() | Palauttaa, onko sarja tyhjä. |
| insert(const g) | Lisää joukkoon uuden elementin 'g'. |
| iteraattorin lisäys (iteraattorin sijainti, const g) | Lisää uuden elementin 'g' iteraattorin osoittamaan kohtaan. |
| pyyhkiä (iteraattorin paikka) | Poistaa elementin iteraattorin osoittamasta kohdasta. |
| pyyhkiä (jatkuu g) | Poistaa arvon 'g' joukosta. |
| asia selvä() | Poistaa kaikki elementit sarjasta. |
| key_comp() / arvo_komp.() | Palauttaa objektin, joka määrittää joukon elementtien järjestyksen (oletuksena '<'). |
| löytää (jatku g) | Palauttaa iteraattorin joukon elementtiin 'g', jos se löytyy, muussa tapauksessa palauttaa iteraattorin loppuun. |
| count (const g) | Palauttaa arvon 1 tai 0 sen mukaan, onko elementti 'g' joukossa vai ei. |
| alaraja(vakio g) | Palauttaa iteraattorin ensimmäiseen elementtiin, joka vastaa 'g' tai joka ei varmasti mene ennen elementtiä 'g' joukossa. |
| yläraja(vakio g) | Palauttaa iteraattorin ensimmäiseen elementtiin, joka menee joukon elementin 'g' jälkeen. |
| equal_range() | Funktio palauttaa parien iteraattorin. (key_comp). Pari viittaa alueeseen, joka sisältää kaikki säiliön elementit, joilla on k:ta vastaava avain. |
| emplace() | Tätä toimintoa käytetään uuden elementin lisäämiseen sarjasäiliöön vain, jos lisättävä elementti on ainutlaatuinen eikä sitä ole jo olemassa joukossa. |
| emplace_hint() | Palauttaa iteraattorin, joka osoittaa paikkaan, jossa lisäys on tehty. Jos parametrissa välitetty elementti on jo olemassa, se palauttaa iteraattorin, joka osoittaa paikkaan, jossa olemassa oleva elementti on. |
| vaihtaa() | Tätä toimintoa käytetään kahden sarjan sisällön vaihtamiseen, mutta sarjojen on oltava samaa tyyppiä, vaikka koot voivat vaihdella. |
| operaattori = | '=' on operaattori C++ STL:ssä, joka kopioi (tai siirtää) joukon toiseen joukkoon ja set::operator= on vastaava operaattorifunktio. |
| get_allocator() | Palauttaa kopion joukkoon liittyvästä allokaattoriobjektista. |
Ero sarjan ja järjestämättömän joukon välillä
| Aseta | Tilaamaton setti |
|---|---|
| Set tallentaa elementit lajiteltuun järjestykseen | Järjestämätön joukko tallentaa elementit lajittelemattomassa järjestyksessä |
| Aseta tallentaa / hanki vain ainutlaatuisia elementtejä | Järjestämätön Aseta tallentaa/hankkia vain yksilölliset arvot |
| Joukko käyttää binäärihakupuita toteutuksessa | Järjestämätön joukko käyttää hajautustaulukoita toteutuksessa |
| Useampi kuin yksi elementti voidaan poistaa antamalla aloitus- ja lopetusiteraattori | Voimme poistaa sen elementin, jolle iteraattorin paikka on annettu |
| aseta Set_Name; | unordered_set UnorderedSet_Name; |
Lisätietoja saat artikkelista - Sarjat vs järjestämätön sarja .