Мне нужно создать двустороннее сопоставление от ints к объекту. Я не могу использовать boost::bimap
, потому что мои объекты изменяются после размещения в сопоставлении (они изменяются способами, которые не влияют на отображение).Эффективное двунаправленное сопоставление памяти в C++
Простое решение состоит в использовании два vector
и unordered_map
:
vector<MyClass> _vector;
unordered_map<MyClass, size_t> _map;
Однако, это поддерживает две копии каждого MyClass
, и я не хочу этого.
я могу держать MyClass *
указатели в одном из контейнеров, а также использовать для хранения другого, но я боюсь, что либо vector
unordered_map
или могут перемещать экземпляры вокруг (при перераспределении вектор, или изменение размера хэш-таблицу).
Любая помощь будет оценена по достоинству.
Как бы вы справились с удалением из вектора, или вы не позволите этого? – Barry
Я бы сказал, что это 'std :: shared_ptr' для. –
Документация boost :: bimap говорит, что вы можете изменять вещи, которые не влияют на отображение, в некоторых настройках бимапа, возможно, –