2012-05-24 77 views
5

我正在嘗試爲C++中的枚舉創建一個簡單的雙向查找工具。我有一個辦法查找工作正常...boost :: bimap for 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,還是需要另一種類型?
這些映射將全部是基本(枚舉,字符串)類型。

其次,有沒有辦法像上面那樣以簡單的方式將地圖定義爲常量?我試圖儘可能容易地進行更新和維護,而不必進入太多額外的typedef等。感謝您的見解。

+0

如果您只是想將枚舉數映射到字符串,您可以利用boost_enum(來自boost vault)。看看這個線程:http://stackoverflow.com/questions/217549/which-typesafe-enum-in-c-are-you-using –

回答

12

嘗試直接使用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' '關係' 的使用。

+0

這很好,謝謝! – salimoneus