2012-05-22 29 views
31

से मान प्राप्त करें मैं एक नक्शा है अर्थात् valueMapनक्शा

typedef std::map<std::string, std::string>MAP; 
MAP valueMap; 
... 
//Entering data 

तब मैं संदर्भ

void function(const MAP &map) 
{ 
    std::string value = map["string"]; 
    // by doing so i am getting error. 
} 

मैं नक्शा, है जहाँ से मूल्य कैसे प्राप्त कर सकते हैं द्वारा एक समारोह में इस मानचित्र गुजर रहा एक समारोह के संदर्भ के रूप में पारित किया?

+12

जब एक त्रुटि मिल के बारे में पोस्ट, आप हमेशा सवाल में वास्तविक त्रुटि शामिल होना चाहिए। –

+2

ठीक है। में इसका ध्यान रखूँगा। धन्यवाद –

उत्तर

53

दुर्भाग्य से std::map::operator[] एक गैर-कॉन्स्ट सदस्य फ़ंक्शन है, और आपके पास एक कॉन्स्ट संदर्भ है।

आप या तो function के हस्ताक्षर बदलने की जरूरत है या कार्य करें:

MAP::const_iterator pos = map.find("string"); 
if (pos == map.end()) { 
    //handle the error 
} else { 
    std::string value = pos->second; 
    ... 
} 

operator[] नक्शे के लिए एक डिफ़ॉल्ट-निर्माण मूल्य जोड़ने और इसे करने के लिए एक संदर्भ के वापस लौट कर त्रुटि संभालती है। यह तब तक उपयोग नहीं है जब आपके पास एक कॉन्स संदर्भ है, इसलिए आपको कुछ अलग करने की आवश्यकता होगी।

आप संभावना ध्यान न दें और string value = map.find("string")->second; बारे में, यदि आपके प्रोग्राम तर्क किसी भी तरह की गारंटी देता है कि "string" पहले से ही एक महत्वपूर्ण है हो सकता है। स्पष्ट समस्या यह है कि यदि आप गलत हैं तो आपको अपरिभाषित व्यवहार मिलता है।

+1

यदि आपका कंपाइलर अभी तक 'ऑटो' का समर्थन नहीं करता है तो 'ऑटो' के 'एमएपी :: कॉन्स्ट_इटरेटर' इंटीड का उपयोग करें। – smerlin

+0

यह 'std :: string value = pos-> दूसरा नहीं होना चाहिए;' या 'const std :: string और value = pos-> दूसरा;'? – smerlin

+0

@smerlin: अच्छा बिंदु, तय। क्या प्रश्नकर्ता को वास्तव में मूल्य की एक प्रति की आवश्यकता है, या एक कॉन्स्ट संदर्भ का उपयोग कर सकते हैं, दिखाए गए कोड पर निर्भर करता है। इसलिए मैंने इसके साथ परेशान न करने का फैसला किया :-) –

12

map.at ("कुंजी") अपवाद फेंकता है तो याद आ रही कुंजी

कश्मीर कंटेनर में किसी भी तत्व के प्रमुख मेल नहीं खाती है, समारोह एक out_of_range अपवाद फेंकता है।

http://www.cplusplus.com/reference/map/map/at/

संबंधित मुद्दे