unordered associative container

Üdvözlöm, Ön a unordered associative container szó jelentését keresi. A DICTIOUS-ban nem csak a unordered associative container szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a unordered associative container szót egyes és többes számban mondani. Minden, amit a unordered associative container szóról tudni kell, itt található. A unordered associative container szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. Aunordered associative container és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.

Főnév

unordered associative container (tsz. unordered associative containers)

  1. (informatika) A nem rendezett asszociatív konténerek (unordered_* konténerek) a C++ Standard Library részei, és az STL (Standard Template Library) biztosítja őket. Ezek a konténerek olyan hash-alapú adatstruktúrákat valósítanak meg, amelyek gyors beszúrást, keresést és törlést biztosítanak.

A nem rendezett konténerek főbb jellemzői: ✅ Gyors keresés, beszúrás és törlés → Átlagosan O(1) időkomplexitás
Hash tábla alapú tárolás → Az elemek nem rendezettek
Nincs garantált sorrend → Az elemek sorrendje változhat



1. A unordered_* konténerek típusai

Konténer Leírás
unordered_set Egyedi elemekből álló halmaz
unordered_multiset Többször előforduló elemekből álló halmaz
unordered_map Kulcs-érték párokat tároló asszociatív tömb
unordered_multimap Olyan unordered_map, amelyben duplikált kulcsok is lehetnek



2. unordered_set (Nem rendezett halmaz)

A std::unordered_set egy halmaz, amelyben minden elem egyedi, és nincs meghatározott sorrend.

2.1. Alapvető műveletek (insert, erase, find)

#include <iostream>
#include <unordered_set>

using namespace std;

int main() {
    unordered_set<int> szamok = {5, 2, 8, 1, 10};

    szamok.insert(3); // Elem hozzáadása
    szamok.erase(2);  // Elem törlése

    if (szamok.find(8) != szamok.end()) {
        cout << "A 8 benne van a halmazban!" << endl;
    }

    cout << "Elemek az unordered_set-ben: ";
    for (int n : szamok) {
        cout << n << " ";
    }

    return 0;
}

📌 Megjegyzés: - A find() függvény O(1) átlagos időben keres. - Az elemek nem garantált sorrendben kerülnek kiírásra!



3. unordered_multiset (Nem rendezett multihalmaz)

A std::unordered_multiset ugyanaz, mint az unordered_set, de tartalmazhat duplikált elemeket.

3.1. Többszörös elemek kezelése

#include <iostream>
#include <unordered_multiset>

using namespace std;

int main() {
    unordered_multiset<int> szamok = {5, 2, 8, 2, 10};

    szamok.insert(2); // Még egy 2-es hozzáadása
    szamok.erase(2);  // Az ÖSSZES 2-est törli!

    cout << "Elemek az unordered_multiset-ben: ";
    for (int n : szamok) {
        cout << n << " ";
    }

    return 0;
}

📌 Megjegyzés: - Az erase(2) az összes 2-es elemet törli.



4. unordered_map (Nem rendezett térkép)

A std::unordered_map egy kulcs-érték párokat tároló asszociatív tömb.

4.1. Alapvető műveletek (insert, erase, find)

#include <iostream>
#include <unordered_map>

using namespace std;

int main() {
    unordered_map<string, int> diakok = {
        {"Anna", 90},
        {"Béla", 85},
        {"Csaba", 78}
    };

    diakok = 92; // Új elem hozzáadása
    diakok.erase("Béla"); // Kulcs törlése

    if (diakok.find("Anna") != diakok.end()) {
        cout << "Anna pontszáma: " << diakok << endl;
    }

    cout << "Diákok pontszámai:" << endl;
    for (const auto &par : diakok) {
        cout << par.first << ": " << par.second << endl;
    }

    return 0;
}

📌 Megjegyzés: - A find() gyorsan keres kulcs alapján O(1) átlagos idővel. - A kulcsok nem garantált sorrendben jelennek meg.



5. unordered_multimap (Nem rendezett multitérkép)

A std::unordered_multimap ugyanaz, mint az unordered_map, de megengedi a duplikált kulcsokat.

5.1. Többször előforduló kulcsok kezelése

#include <iostream>
#include <unordered_multimap>

using namespace std;

int main() {
    unordered_multimap<string, int> pontok = {
        {"Anna", 90},
        {"Béla", 85},
        {"Anna", 78} // Anna kétszer is szerepelhet!
    };

    pontok.insert({"Dóra", 92});
    
    cout << "Diákok pontszámai:" << endl;
    for (const auto &par : pontok) {
        cout << par.first << ": " << par.second << endl;
    }

    return 0;
}

📌 Megjegyzés: - Az unordered_multimap lehetővé teszi, hogy egy kulcshoz több érték is tartozzon.



6. Teljesítmény és használati különbségek

6.1. Összehasonlító táblázat

Konténer Egyedi elemek Rendezett? Beszúrás/Törlés/Keresés
unordered_set O(1) (átlagosan)
unordered_multiset O(1) (átlagosan)
unordered_map O(1) (átlagosan)
unordered_multimap O(1) (átlagosan)



7. unordered_* vs. ordered_* (Hash vs. Fa)

C++ biztosít rendezett (set, map) és nem rendezett (unordered_set, unordered_map) konténereket.

Tulajdonság unordered_* konténerek ordered_* konténerek (set, map)
Sorrend Nincs rendezés Kulcs szerint rendezett
Keresési idő O(1) (átlagosan) O(log n) (fa alapú)
Adatszerkezet Hash tábla Piros-fekete fa
Használati példa Gyors kulcsalapú keresés Ha szükség van rendezett adatokra

Mikor használjuk az unordered_* konténereket?
- Ha gyors keresés, beszúrás vagy törlés kell, és nem számít a rendezés. - Nagyméretű adatok kezelésekor, mivel az unordered_* jobb teljesítményt biztosít.

Mikor használjuk az ordered_* konténereket?
- Ha a kulcsok rendezése fontos (pl. lexikografikus sorrendben). - Ha hatékony intervallumkeresésre van szükség.



Összegzés

  • Az unordered_* konténerek gyorsabbak lehetnek, mert hash tábla alapúak.
  • unordered_set → Egyedi elemek, unordered_multiset → Duplikált elemek.
  • unordered_map → Egyedi kulcs-érték párok, unordered_multimap → Duplikált kulcsok.
  • Ha sorrend nem számít és gyors keresés kell, akkor unordered_* ajánlott! 🚀