#pragma once #include #include template using ClearableHashMapCell = ClearableHashTableCell>; template < typename Key, typename Mapped, typename Hash = DefaultHash, typename Grower = HashTableGrower<>, typename Allocator = HashTableAllocator > class ClearableHashMap : public HashTable, Hash, Grower, Allocator> { public: typedef Key key_type; typedef Mapped mapped_type; typedef typename ClearableHashMap::cell_type::value_type value_type; mapped_type & operator[](Key x) { typename ClearableHashMap::iterator it; bool inserted; this->emplace(x, it, inserted); if (inserted) new(&it->second) mapped_type(); return it->second; } void clear() { ++this->version; this->m_size = 0; } };