// ── ABOUT ────────────────────────────────────────────────────────
// Same as map but NO guaranteed order
// insert / find / erase / access → O(1) average
// Use when you need fast lookup and don't care about key order
 
// ── CREATE & INSERT ──────────────────────────────────────────────
unordered_map<int, string> m;
m[1] = "abc";                            // O(1)
m[5] = "ded";
m[5] = "sof";                            // overwrites
m.insert({2, "omm"});
 
// ── ITERATE ──────────────────────────────────────────────────────
for (auto &pair : m)
    cout << pair.first << " " << pair.second << " | ";
// order is NOT guaranteed
 
// ── FIND ─────────────────────────────────────────────────────────
auto f = m.find(5);                      // O(1)
if (f == m.end())
    cout << "not found";
else
    cout << f->first << " = " << f->second;
 
// ── COUNT (check existence) ──────────────────────────────────────
if (m.count(2))                          // O(1) → preferred over find for existence
    cout << "exists";
 
// ── ACCESS ───────────────────────────────────────────────────────
cout << m[2];                            // O(1)
cout << m[10];                           // WARNING: creates key 10 with default value!
 
// ── ERASE ────────────────────────────────────────────────────────
m.erase(3);                              // by key   O(1)
auto er = m.find(3);
m.erase(er);                             // by iterator