associative container

Üdvözlöm, Ön a associative container szó jelentését keresi. A DICTIOUS-ban nem csak a 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 associative container szót egyes és többes számban mondani. Minden, amit a associative container szóról tudni kell, itt található. A associative container szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. Aassociative 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

associative container (tsz. associative containers)

  1. (informatika) A C++ Standard Template Library (STL) részeként az asszociatív tárolók olyan adatszerkezetek, amelyek elemeket kulcs alapján tárolnak és gyors keresést, beszúrást, valamint törlést biztosítanak. Az asszociatív konténerek rendezetten vagy rendezetlenül tárolhatják az adatokat.



1. Associative konténerek típusai

A C++ STL négy fő asszociatív konténert biztosít:

Konténer Leírás Sorrend Duplikátumok
std::map Kulcs-érték párok tárolása Rendezett (kulcs szerint) Nem engedélyezett
std::multimap Kulcs-érték párok tárolása Rendezett (kulcs szerint) Engedélyezett
std::set Egyedi elemek halmaza Rendezett (elemek szerint) Nem engedélyezett
std::multiset Többször előforduló elemek halmaza Rendezett (elemek szerint) Engedélyezett

Ha a gyors keresés és beszúrás fontosabb, mint a rendezettség, akkor az unordered változatokat használjuk (std::unordered_map, std::unordered_set stb.).



2. std::map – Rendezett kulcs-érték tárolás

A std::map egy fából (általában Red-Black Tree) implementált kulcs-érték alapú tároló. Az elemek kulcs szerint rendezettek, és egy kulcs csak egyszer szerepelhet.

Példa – std::map használata

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> korok;

    // Kulcs-érték párok beszúrása
    korok = 25;
    korok = 30;
    korok = 22;

    // Kiírás
    for (const auto&  : korok) {
        std::cout << nev << " -> " << kor << " év" << std::endl;
    }

    return 0;
}

Kimenet:

Anna -> 25 év
Béla -> 30 év
Csaba -> 22 év

🔹 A std::map automatikusan rendezi a kulcsokat (ábécérendben)!
🔹 Az operator segítségével könnyen hozzáadhatunk vagy módosíthatunk elemeket.

Keresés és törlés std::map esetén

if (korok.find("Anna") != korok.end()) {
    std::cout << "Anna életkora: " << korok << std::endl;
}

korok.erase("Béla"); // Béla törlése a térképből

🔹 find() ellenőrzi, hogy létezik-e a kulcs.
🔹 erase() törli a megadott kulcsot.



3. std::multimap – Többször előforduló kulcsok

A std::multimap hasonló a std::map-hoz, de ugyanaz a kulcs többször is szerepelhet.

Példa – std::multimap használata

#include <iostream>
#include <map>

int main() {
    std::multimap<std::string, int> diakJegyek;

    // Többször előforduló kulcsok
    diakJegyek.insert({"Anna", 5});
    diakJegyek.insert({"Béla", 4});
    diakJegyek.insert({"Anna", 3});

    for (const auto&  : diakJegyek) {
        std::cout << nev << " kapott: " << jegy << std::endl;
    }

    return 0;
}

Kimenet:

Anna kapott: 3
Anna kapott: 5
Béla kapott: 4

🔹 Többször előfordulhat ugyanaz a kulcs.
🔹 insert() szükséges új kulcspárok beszúrására, mert operator nem támogatott.



4. std::set – Egyedi rendezett elemek

A std::set egy automatikusan rendezett gyűjtemény, amelyben minden elem egyedi.

Példa – std::set használata

#include <iostream>
#include <set>

int main() {
    std::set<int> szamok = {5, 3, 8, 1, 3, 5};

    // Kiírás (rendezett és egyedi elemek)
    for (int x : szamok) std::cout << x << " ";
    return 0;
}

Kimenet:

1 3 5 8

🔹 Az elemek egyediek és mindig rendezettek!
🔹 A duplikált elemek automatikusan eltűnnek.

Keresés std::set-ben

if (szamok.find(3) != szamok.end()) {
    std::cout << "A 3-as benne van a halmazban!" << std::endl;
}

5. std::multiset – Rendezett, de duplikált elemek engedélyezettek

A std::multiset hasonló a std::set-hez, de duplikált elemek is szerepelhetnek benne.

Példa – std::multiset használata

#include <iostream>
#include <set>

int main() {
    std::multiset<int> szamok = {5, 3, 8, 1, 3, 5};

    for (int x : szamok) std::cout << x << " ";
    return 0;
}

Kimenet:

1 3 3 5 5 8

🔹 Duplikált elemek megengedettek.
🔹 Mindig rendezett marad.



6. Összehasonlítás – Mikor melyik konténert használjuk?

Funkció std::map std::multimap std::set std::multiset
Rendezett? ✅ Igen ✅ Igen ✅ Igen ✅ Igen
Kulcs-érték párok? ✅ Igen ✅ Igen ❌ Nem ❌ Nem
Duplikáció engedélyezett? ❌ Nem ✅ Igen ❌ Nem ✅ Igen
Gyors keresés (O(log n)) ✅ Igen ✅ Igen ✅ Igen ✅ Igen
Legjobb használat Egyedi kulcsok, gyors keresés Többször előforduló kulcsok Egyedi elemek, gyors keresés Duplikált elemek kezelése



7. Alternatíva: unordered_map és unordered_set

Ha még gyorsabb keresésre van szükség, de nem fontos a rendezett sorrend, akkor használjuk a hash-alapú konténereket: - std::unordered_map - std::unordered_set

Ezek általában O(1) időben keresnek, míg az std::map és std::set O(log n) időt igényel. 🚀



Összegzés

std::map – Egyedi kulcsok, automatikusan rendezett.
std::multimap – Többször előforduló kulcsok, rendezett.
std::set – Egyedi, rendezett elemek.
std::multiset – Rendezett, de duplikált elemek is lehetnek benne.

Ha gyors keresés kell rendezés nélkül, használj unordered_map-ot vagy unordered_set-et! 🚀