#include "utils.hpp"
#include <unordered_map>
using namespace std;
/*
unordered_map – elérhető fontos tagfüggvények (hash-alapú kulcs–érték párok, rendezetlen):
Konstruktorok / inicializálás:
unordered_map()
unordered_map(initializer_list< pair<const Key, T> >)
unordered_map(first, last)
Kapacitás és méret:
size()
empty()
max_size()
reserve(n) // várt elemszám → hatékony méretezés
rehash(bucket_count)
Hash/bucket statisztikák:
bucket_count()
bucket_size(n)
bucket(key)
load_factor()
max_load_factor()
// max_load_factor(x)
Elem-hozzáférés:
operator[](const Key& k) // ha nincs, létrehoz default T()-t, majd ref.
operator[](Key&& k)
at(const Key& k) // határellenőrzött (throws)
contains(const Key& k) // C++20, bool
Iterátorok:
begin(), end()
cbegin(), cend()
Keresés:
find(const Key& k)
count(const Key& k)
equal_range(const Key& k)
Módosító műveletek:
insert(value) / insert(first, last) / insert(init_list)
emplace(args...)
insert_or_assign(k, obj) // C++17
try_emplace(k, args...) // C++17
erase(pos) / erase(first, last) / erase(const Key& k)
clear()
swap(other)
merge(other) // C++17
extract(key) / extract(pos) // C++17
Megjegyzések:
- Átlagban O(1) műveletek; sorrend nem determinisztikus.
- reserve/rehash és max_load_factor a teljesítmény/szórás beállítására.
*/
void demo_unordered_map() {
unordered_map<string, int> szotar = { {"piros", 1}, {"zold", 2}, {"kek", 3} };
szotar["fekete"] = 0;
for (auto& [szin, kod] : szotar)
cout << szin << " -> " << kod << "\n";
cout << "kek kulcs benne van? " << (szotar.count("kek") ? "Igen" : "Nem") << "\n";
szotar.erase("zold");
cout << "zold törlése után:\n";
for (auto& [szin, kod] : szotar)
cout << szin << " -> " << kod << "\n";
int osszeg = 0;
for (auto& [_, kod] : szotar) osszeg += kod;
cout << "Az összes érték összege: " << osszeg << "\n";
}