#include "utils.hpp"
#include <map>
using namespace std;
/*
map – elérhető fontos tagfüggvények (rendezett kulcs–érték párok; kulcsok egyediek):
Konstruktorok / inicializálás:
map()
map(initializer_list< pair<const Key, T> >)
map(first, last)
Kapacitás és méret:
size()
empty()
max_size()
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 hozzáférés (throws)
// C++20: contains(const Key& k) // csak ellenőriz (bool)
Iterátorok:
begin(), end()
rbegin(), rend()
cbegin(), cend()
crbegin(), crend()
Keresés / tartományok:
find(const Key& k)
count(const Key& k) // 0 vagy 1
lower_bound(const Key& k)
upper_bound(const Key& k)
equal_range(const Key& k) // [lower_bound, upper_bound)
Módosító műveletek:
insert(value) / insert(first, last) / insert(init_list)
emplace(args...) // helyben konstruál
insert_or_assign(k, obj) // C++17: ha van kulcs → felülír; különben beszúr
try_emplace(k, args...) // C++17: csak ha NINCS kulcs; érték helyben készül
erase(pos) / erase(first, last) / erase(const Key& k)
clear()
swap(other)
merge(other) // C++17: egyesítés rendezettből
extract(key) / extract(pos) // C++17: node handle kiemelés
Megjegyzések:
- Rendezett (ált. RB-fa), O(log n) műveletek.
- operator[] mellékhatás: hiányzó kulcsot létrehozza → csak akkor használd, ha ez kívánatos.
*/
void demo_map() {
map<string, int> pontok = { {"Anna", 95}, {"Bela", 85}, {"Cecil", 90} };
pontok.emplace("David", 88);
for (auto& [nev, pont] : pontok)
cout << nev << " pontszáma: " << pont << "\n";
cout << "Cecil benne van? " << (pontok.count("Cecil") ? "Igen" : "Nem") << "\n";
pontok.erase("Bela");
print_container(pontok | views::keys, "Kulcsok Bela törlése után");
cout << "Aktuális elemszám: " << pontok.size() << "\n";
}