2010-04-27 17 views
13

मैं सी ++ में हैशटेबल या डिक्शनरी कार्यान्वयन की तलाश में हूं जिसमें सी # में एक की समान कार्यक्षमता है? क्या एसटीएल में इस तरह की वस्तु होती है और मैं इसका उपयोग कैसे करूं?शब्दकोश/H ++ में हैशटेबल ऑब्जेक्ट?

उत्तर

11

वास्तव में है, वास्तव में नेट के शब्दकोश/Hashtable, तुम क्या चाहते है hash_map या unordered_map (std::map एक द्विआधारी पेड़ के रूप में कार्यान्वित किया जाता है) के रूप में ही हो सकता है, hash_map एक विस्तार है एससी ++ एल के लिए। अधिकांश संकलक जो मुझे पता है hash_map के साथ आते हैं, और स्पष्ट रूप से unordered_map तक बढ़ते हैं जब तक कि सभी कंपाइलरों में सी ++ 0x उपलब्ध न हो, तो आपको बिना किसी परेशानी के इसका उपयोग करने में सक्षम होना चाहिए।

+1

सी ++ में हैश_मैप के रूप में ऐसा कोई कंटेनर नहीं है, और सी ++ 0x में नहीं होगा। सी ++ में हैश तालिका के नाम का नाम unordered_map है - से http://publib.boulder.ibm.com/infocenter/comphelp/v9v111/topic/com.ibm.xlcpp9.aix.doc/standlib/stl_unordered_map.htm –

+0

हां, मैंने अपना जवाब थोड़ा सा अपडेट किया ... –

+5

आह, सी ++ मानकों की प्रक्रिया। रोम जलते समय हैशटेबल वर्ग के नाम के बारे में सोचना। – stusmith

2

मुझे विश्वास है कि आप map देख रहे हैं। अधिक के लिए here देखें।

5

एसटीएल std::map        

+1

नक्शा एक संतुलित पेड़ है, एक हैश कंटेनर नहीं है। – Joe

+0

@joe - प्रश्न हैशैप * या * डिक्शनरी क्लास सी ++ एसटीएल में था, इसलिए 'std :: map' बिल फिट बैठता है। – gnud

+1

@gnud: ओपी ने यह भी कहा कि "सी # में एक के लिए समान कार्यक्षमता है", जो केवल प्रदर्शन रहित विशेषताओं के बारे में बात कर रहे हैं, जो केवल unordered_map फिट बैठता है। – Joe

3

एसटीएल std::map का उपयोग शब्दकोश बनाने के लिए किया जा सकता है। std::map आमतौर पर एक खोज पेड़ के रूप में लागू किया जाता है, हैश तालिका नहीं। इसका मतलब यह है कि लुकअप और सम्मिलन में सी # 0 के HashMap की तुलना में अलग-अलग गुणों की विशेषताएं हैं - बहुत बड़े मानचित्रों के लिए, औसत लुकअप धीमा हो जाएगा, खासकर यदि मानचित्र में ऑब्जेक्ट्स स्मृति में विभाजित हैं।

नए सी ++ मानक के TR1 में, आपके पास std::tr1::unordered_map और std::tr1::unordered_multimap है, जिसे आमतौर पर हैश तालिका का उपयोग करके कार्यान्वित किया जाएगा। यदि आपका कंपाइलर उन पुस्तकालयों को प्रदान नहीं करता है, तो आप http://www.boost.org/ से कार्यान्वयन का उपयोग कर सकते हैं।

फिर भी एक और विकल्प Google का sparse_hash है।

+0

एक std :: मानचित्र में एक लुकअप ** है ** ** ** हैश_मैप की तुलना में धीमी गति से नहीं है। केवल हैश_मैप का असम्बद्ध प्रदर्शन ओ (1) बनाम ओ (लॉग एन) है, लेकिन 1 के बड़े पर्याप्त मानों के लिए, लॉग n तेज हो सकता है। व्यावहारिक रूप से यह अक्सर मामला पर्याप्त होता है, _and_ एक अच्छा हैश-फ़ंक्शन ढूंढना एक सही ऑपरेटर को लागू करने से कहीं अधिक कठिन होता है <। – gimpf

+0

बस पुनः पढ़ा, आपने कहा _often_, हमेशा नहीं, मेरी गलती। हालांकि, _often_ का तात्पर्य है कि ज्यादातर लोग सही हैश-फ़ंक्शंस का उपयोग करके लगभग 1000 प्रविष्टियों के साथ शब्दकोशों का उपयोग करते हैं। एक कंपनी के भीतर काम के क्षेत्र और कौशल स्तर के आधार पर यह वास्तव में असंभव हो सकता है। – gimpf

+0

शायद 'धीमा हो जाएगा' आईएसए थोड़ा कठोर। मेरा मुद्दा मुख्य रूप से है कि उनके पास विभिन्न प्रदर्शन विशेषताएं हैं। – gnud

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