boost :: bimap для enum

Я пытаюсь создать простое средство двунаправленного поиска для перечислений в C ++. У меня односторонний поиск работает нормально ...

enum MyEnum
{ 
    One, 
    Two, 
    Three 
};

const boost::unordered_map<MyEnum,std::string> MyEnumMap = map_list_of
    (One, "One")
    (Two, "Two")
    (Three, "Three");

а затем просматривая

MyEnumMap.at(One)

Это работает, но это позволяет только поиск на основе ключа. Я хотел бы использовать контейнер двунаправленного поиска, такой как boost: bimap, чтобы обеспечить легкий обратный поиск, основанный как на значении, так и на ключе. Похоже, что map_list_of не совместим с boost :: bimap.

Во-первых, я все еще должен использовать map_list_of с boost :: bimap, или требуется другой тип?
Все карты будут базового типа (Enum, string).

Во-вторых, есть ли способ, которым я все еще могу определить карту как const простым способом, как указано выше? Я пытаюсь сделать это как можно более простым для обновления и поддержки, не вдаваясь в слишком много дополнительных typedef и тому подобного. Ваше понимание ценится.

Ответы на вопрос(1)

Ваш ответ на вопрос