2012-05-24 2 views
5

C++에서 열거 형에 대한 간단한 양방향 검색 기능을 만들려고합니다. 나는 편도 조회가 ... 잘enum에 대한 boost :: bimap

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) 

를 통해 모습을하고 있지만 그것은 단지 키를 기반으로 검색이 가능하게 해줍니다. 부스트 : bimap과 같은 양방향 검색 컨테이너를 사용하여 키뿐만 아니라 값에 따라 쉽게 역순으로 조회 할 수 있습니다. map_list_of가 boost :: bimap과 호환되는 것처럼 보이지 않습니다.

우선 map_list_of를 boost :: bimap과 함께 사용해야합니까, 아니면 다른 유형이 필요합니까?
지도는 모두 기본 (열거 형, 문자열) 유형입니다.

둘째, 위와 같이 간단한 방법으로지도를 const로 정의 할 수있는 방법이 있습니까? 너무 많은 추가 typedefs 및 등지고없이 가능한 한 업데이트하고 유지하기가 쉽도록하기 위해 노력하고있어. 귀하의 통찰력은 높이 평가됩니다.

+0

열거자를 문자열로 매핑하는 좋은 방법에 관심이 있다면 boost_enum (부스트 볼트)을 활용할 수 있습니다. 이 스레드를보십시오 : 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