Вопрос по c++ – boost :: bimap для enum

6

Я пытаюсь создать простое средство двунаправленного поиска для перечислений в 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 и тому подобного. Ваше понимание ценится.

если вы просто заинтересованы в том, чтобы отобразить перечислители в строки, вы можете воспользоваться boost_enum (из boost vault). Посмотри эту ветку:stackoverflow.com/questions/217549/… Carsten Greiner

Ваш Ответ

1   ответ
13

Попробуйте использовать list_of напрямую:

typedef boost::bimap< MyEnum, std::string > bm_type;
const bm_type MyEnumMap =
  boost::assign::list_of< bm_type::relation >
    ( One, "One" )
    ( Two, "Two" )
    ( Three, "Three" );

Обратите внимание на использование «отношения»; вместо «value_type».

Это работает хорошо, спасибо! salimoneus

Похожие вопросы