2009-10-29 16 views
39

मुझे हाल ही में पता चला है कि सी ++ में हैश मानचित्र के कार्यान्वयन को unordered_map कहा जाएगा।हैश_मैप और unordered_map के बीच अंतर?

जब मैं ऊपर देखा है कि वे सिर्फ hash_map का उपयोग नहीं कर रहे थे, मुझे लगता है कि जाहिरा तौर पर वहाँ hash_map कि unordered_map हल (यह here के बारे में अधिक) के कार्यान्वयन के साथ संगतता के मुद्दों कर रहे हैं की खोज की।

वह विकी पृष्ठ अधिक जानकारी नहीं देता है, इसलिए मुझे आश्चर्य है कि अगर hash_mapunordered_map के साथ कुछ मुद्दों को हल किया गया है तो हल हो जाता है।

उत्तर

63

चूंकि सी ++ मानक पुस्तकालय में परिभाषित कोई हैश तालिका नहीं थी, मानक पुस्तकालयों के विभिन्न कार्यान्वयनकर्ता गैर-मानक हैश तालिका को अक्सर hash_map नामित करेंगे। चूंकि इन कार्यान्वयनों को मानक के बाद नहीं लिखा गया था, इसलिए सभी में कार्यक्षमता और प्रदर्शन गारंटी में सूक्ष्म मतभेद थे।

C++11 से शुरू हो रहा है एक हैश तालिका कार्यान्वयन सी ++ मानक पुस्तकालय मानक में जोड़ा गया है। इन गैर-मानक कार्यान्वयन के साथ टकराव को रोकने के लिए कक्षा के लिए वैकल्पिक नाम का उपयोग करने और उनके कोड में hash_table डेवलपर्स द्वारा नई कक्षा के अनजान उपयोग को रोकने के लिए निर्णय लिया गया था।

चयनित वैकल्पिक नाम unordered_map है जो वास्तव में अधिक वर्णनात्मक है क्योंकि यह कक्षा के मानचित्र इंटरफ़ेस और इसके तत्वों की अनियमित प्रकृति पर संकेत देता है।

+4

और यह उन चीजों में से एक है जो दिखाते हैं कि 'std' नेमस्पेस ने जो कुछ भी आशा की थी वह काफी नहीं किया था। ऐसा नहीं है कि मुझे पता है कि समस्या को उचित रूप से किस तरह से रोका होगा। –

+1

एक नेस्टेड नेमस्पेस, जैसे tr1 ... –

+0

एमएसवीसी के अपने मानक विस्तार पुस्तकालयों के लिए stdext था। – Puppy

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