2010-02-28 11 views
9

में unordered_map मेरे पास पाइथन शब्दकोश कैसे काम करते हैं, इसकी समझ से संबंधित एक प्रश्न है।पाइथन dict और tr1 के बीच का अंतर :: C++

मुझे याद है कि पाइथन में कहीं भी तारों को पढ़ना हैशिंग की अनुमति देने के लिए अपरिवर्तनीय है, और यही कारण है कि कोई सीधे सूचियों के रूप में सूचियों का उपयोग नहीं कर सकता है, यानी सूचियां उत्परिवर्तनीय हैं (समर्थन का समर्थन करके) और इसलिए उन्हें उपयोग नहीं किया जा सकता है शब्दकोश कुंजी

मैं जानना चाहता था कि सी ++ में unordered_map के कार्यान्वयन इन मामलों को कैसे संभालता है। (चूंकि सी ++ में स्ट्रिंग्स व्यवहार्य हैं)

+2

इच्छा है कि मैं पोस्ट संपादित कर सकूं, इसलिए मैं "dict" में "'" को संपादित कर सकता हूं ... ;-) (हाँ, मैं एक स्नैकी मूड में हूं ;-) –

+0

संपादन के लिए बहुत बहुत धन्यवाद! :- डी –

उत्तर

7

सभी सी ++ मानचित्र/सेट कंटेनर में कुंजीें स्थिर हैं और इस प्रकार अपरिवर्तनीय (कंटेनर में जोड़े जाने के बाद)।

ध्यान दें कि सी ++ कंटेनर स्ट्रिंग कुंजियों के लिए विशिष्ट नहीं हैं, आप किसी ऑब्जेक्ट का उपयोग कर सकते हैं, लेकिन कंटेनर को कुंजी की प्रतिलिपि बनाने के बाद स्थिरता संशोधनों को रोक देगा।

+1

क्या होगा यदि कोई कुंजियों के साथ गड़बड़ में const_cast का उपयोग करता है। धन्यवाद –

+0

संदर्भ: http://www.sgi.com/tech/stl/Map.html - 'value_type' को" ऑब्जेक्ट का प्रकार, "जोड़ी ' के रूप में परिभाषित किया गया है, मानचित्र में संग्रहीत । " 'Const' पर ध्यान दें। – Dan

+4

@ अक्षय: अगर कोई ऐसा करता है, तो वे जो भी लायक होते हैं उन्हें प्राप्त करते हैं :) 'std :: map' को लाल-काले पेड़ का उपयोग करके कार्यान्वित किया जाता है। एक कुंजी बदलने से पेड़ को अमान्य कर दिया जाएगा। हैश टेबल का उपयोग करके 'unordered_map' लागू किया गया है। एक कुंजी बदलने से इसका मतलब यह होगा कि आप शायद उस आइटम को कभी भी नहीं ढूंढ पाएंगे, क्योंकि यह शायद इसकी नई कुंजी के लिए गलत हैश बाल्टी में होगा। – Dan

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