#include #include #include #include #include #include struct Account { int id; std::string name; }; struct HashId { std::size_t operator()(const Account& a) const { return std::hash{}(a.id); } }; struct EqualId { bool operator()(const Account& a, const Account& b) const { return a.id == b.id; } }; int main() { std::unordered_set accounts; accounts.max_load_factor(0.75f); accounts.reserve(8); auto inserted = accounts.insert(Account{7, "Ada"}); auto duplicate = accounts.insert(Account{7, "Alias"}); assert(inserted.second && !duplicate.second); const Account* saved = &*inserted.first; accounts.rehash(accounts.bucket_count() + 1); auto found = accounts.find(Account{7, "ignored"}); assert(found != accounts.end() && &*found == saved); assert(saved->name == "Ada" && accounts.size() == 1); std::cout << saved->id << ' ' << saved->name << '\n'; }