unordered associative container
Főnév
unordered associative container (tsz. unordered associative containers)
- (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["Dóra"] = 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["Anna"] << 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! 🚀
- unordered associative container - Szótár.net (en-hu)
- unordered associative container - Sztaki (en-hu)
- unordered associative container - Merriam–Webster
- unordered associative container - Cambridge
- unordered associative container - WordNet
- unordered associative container - Яндекс (en-ru)
- unordered associative container - Google (en-hu)
- unordered associative container - Wikidata
- unordered associative container - Wikipédia (angol)