2010-10-22 17 views
12

के लिए एक कॉन्स कुंजी का उपयोग करना मैं std :: map से std :: unordered_map पर अपना कोड स्विच कर रहा हूं जहां उचित हो।unordered_map

std::map<const std::string, int> 

सच कहूं, मैं अगर यह स्थिरांक किसी भी मूल्य का था कभी नहीं की जाँच: std :: नक्शे के साथ, मैं आम तौर पर सिर्फ निम्नलिखित यकीन है कि कुंजी बदला नहीं जा सकता बनाने के लिए लिखें। यह हमेशा संकलित और जी ++ के साथ काम किया है।

अब, std :: unordered_map के साथ, निम्नलिखित g ++ 4.5.1 से लिंक करने में विफल रहता है।

std::unordered_map<const std::string, std::string> m; 
m["foo"] = "bar"; 
इस लिंक त्रुटि के साथ

:

Undefined symbols: "std::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::operator()(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const" , referenced from:

ठीक, सरल है स्थिरांक दूर करने के लिए है, लेकिन उस के अलावा, वहाँ साहचर्य कंटेनर क्लासों एक स्थिरांक उपयोग करने के लिए से किसी के साथ एसटीएल में भी एक मुद्दा है मुख्य प्रकार से? क्या कोई तरीका नहीं है जो आपको किसी भी सहयोगी प्रकार के लिए कुंजी का संदर्भ प्राप्त करने देता है?

उत्तर

17

सहयोगी कंटेनर केवल (कुंजी, मान) जोड़ी को std::pair<const key_type, mapped_type> के रूप में उजागर करते हैं, इसलिए कुंजी प्रकार पर अतिरिक्त आधार अनिवार्य है।

+5

या दूसरे शब्दों में: 'std :: unordered_map वह वही करेगा जो वह चाहता है। (जोनाथन कहते हैं, सबसे ज्यादा स्पष्ट करने के लिए।) –

+0

हे, हाँ, मैं देख सकता हूं कि मेरे उत्तर को मूल प्रश्न को समझने के लिए कैसे आवश्यक है :) – MSN

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