Мне нужна структура данных, которая управляет целочисленными идентификаторами для T
объектов (обычно std::string
).Он должен поддерживать получение идентификатора для некоторого объекта и, наоборот, получать объект для некоторого идентификатора:
// if object not seen before: copies and stores object and returns
// new ID, otherwise just returns its ID
int Add(const T& obj);
// if obj not found: returns some specified `NotFound` ID,
// otherwise just returns its ID
int GetId(const T& obj);
// if id not contained: throws exception,
// otherwise returns associated object
const T& GetObj(int id)
Он также должен владеть всеми этими T
объектами, поэтому он внутренне распределяет новые объекты, сохраняет ихи удаляет их в деструкторе.
Есть комментарии?Как бы вы это реализовали?
Я использую эти два контейнера внутри;каждый указатель объекта хранится в обоих:
// quickly retrieve the ID
std::map<const T*, int, CompareByValue> Obj2IdMap;
// quickly retrieve the object, given an ID
std::vector<const T*> Id2ObjMap;
Существуют ли другие структуры данных, которые могут помочь?Или весь этот менеджер идентификаторов объектов уже доступен в некоторой библиотеке?