// ── 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