Я создал простой класс двунаправленной карты, который работает путем внутреннего хранения двух экземпляров std::map
с противоположными ключами/значениями типов и обеспечения удобного интерфейса:
template<class T1, class T2> class Bimap
{
std::map<T1, T2> map1;
std::map<T2, T1> map2;
// ...
};
-
Есть ли более эффективный метод реализации двунаправленной карты, которая не требует удвоенной памяти?
-
Как обычно реализуется бимап?
EDIT:
-
Должен ли бимап-элемент быть изменяемым или неизменным? (Изменение одного элемента в
map1
должно изменить ключ вmap2
, но клавиши const и что невозможно - какое решение?) -
Собственность на элементы также является еще одной проблемой: когда пользователь вставляет пару "ключ-значение" в бимап, бимап должен сделать копию этой пары ключ-значение и сохранить ее, а затем внутреннюю вторую карту (с инвертированный ключ/значение) не следует копировать, а указывать на исходную пару. Как это можно достичь?
ИЗМЕНИТЬ 2:
Я опубликовал возможную реализацию, которую я сделал в обзоре кода.