#include #include #include namespace utils { using IdType = std::size_t; template class Storage { public: IdType GetId(const T& value) { IdType id = 0; auto value_position = value_to_id_.find(value); if (value_position == value_to_id_.end()) { id = id_to_value_.size(); value_to_id_[value] = id; id_to_value_.push_back(value); } else { id = value_position->second; } return id; } const T& GetValue(IdType id) { return id_to_value_[id]; } private: std::vector id_to_value_; std::unordered_map value_to_id_; }; } // namespace utils