2012-05-24 13 views
5

के लिए bimap मैं सी ++ में enums के लिए एक सरल द्वि-दिशात्मक लुकअप सुविधा बनाने की कोशिश कर रहा हूँ। मैं एक तरह से देखने ठीक काम कर रहा ...बूस्ट :: 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) 

काम करता है कि एक बार देख कर है लेकिन यह केवल कुंजी के आधार पर खोज के लिए अनुमति देता है। मैं एक द्वि-दिशात्मक लुकअप कंटेनर का उपयोग करना चाहता हूं जैसे बूस्ट: बिमाप मूल्य के साथ-साथ कुंजी के आधार पर आसान रिवर्स लुकअप की अनुमति देता है। ऐसा लगता है कि map_list_of हालांकि boost :: bimap के साथ संगत है।

सबसे पहले, क्या मुझे अभी भी boost :: bimap के साथ map_list_of का उपयोग करना चाहिए, या एक और प्रकार आवश्यक है?
मानचित्र सभी एक बुनियादी (एनम, स्ट्रिंग) प्रकार होंगे।

दूसरा, क्या कोई तरीका है कि मैं अभी भी मानचित्र को सरल तरीके से कॉन्स्ट के रूप में परिभाषित कर सकता हूं? मैं इसे जितना संभव हो उतना अद्यतन करने और बनाए रखने के लिए जितना संभव हो उतना अतिरिक्त टाइपइपिफ़ और इस तरह के बनाए रखने की कोशिश कर रहा हूं। आपकी अंतर्दृष्टि की सराहना की जाती है। बजाय 'VALUE_TYPE' के 'संबंध' के उपयोग

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"); 

नोट:

+0

यदि आप स्ट्रिंग्स के लिए गणक को मैप करने के लिए एक अच्छे तरीके से रुचि रखते हैं, तो आप boost_enum (बूस्ट वॉल्ट से) का लाभ उठा सकते हैं। इस धागे को देखें: http://stackoverflow.com/questions/217549/which-typesafe-enum-in-c-are-you-using –

उत्तर

12

सीधे list_of का उपयोग करें।

+0

यह अच्छी तरह से काम करता है, धन्यवाद! – salimoneus