#pragma once #include template struct HashPair { K key; Option value; bool operator==(const HashPair& other) const { return key == other.key; } }; template u64 hash(const HashPair& value, u64 salt) { return hash(value.key, salt); } template struct HashMap { public: Result try_set(const K& key, const V& value) { return m_table.try_set(HashPair { key, value }); } Option try_get(const K& key) { auto* p = m_table.try_find(HashPair { key, {} }); if (!p) return {}; return p->value; } bool try_remove(const K& key) { return m_table.try_remove(HashPair { key, {} }); } private: HashTable> m_table; };