"Как-то мне понадобилась мне двухсторонняя карта но особенная.
Требования такие:
С одного узла есть только одно сопоставление, но с нескольких узлов можно придти к одному сопоставлению.
boost;:multi_index увы не подходил, можно было конечно как-то приспособить его, но не было сил разбираться
Поэтому был созданн специальный тип.
Используются 2 экземпляра std::map которые синхронизируются.
Использование аналогичное std::map за исключением передачи 3-го аргумена в value_type, который определяет направление.
А также есть публичные члены класса left, right которые являются по сути std::map"
источник.