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と互換性があるようには見えません。

まず、boost :: bimapでmap_list_ofを使用する必要がありますか、それとも別のタイプが必要ですか?
マップはすべて基本(列挙型、文字列)型になります。

次に、上記のような簡単な方法でマップをconstとして定義できる方法はありますか?追加のtypedefなどをあまり多く使用せずに、これをできるだけ簡単に更新および保守できるようにしようとしています。あなたの洞察は高く評価されています。

4

1 に答える 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'の代わりに'relation'を使用していることに注意してください。

于 2012-05-24T22:45:55.587 に答える