Я пытаюсь создать простой двунаправленный механизм поиска для перечислений на C++. У меня есть один-путь поиска работает отлично ...boost :: bimap для enum
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). Посмотрите эту тему: http://stackoverflow.com/questions/217549/which-typesafe-enum-in-c-are-you-using –