मैं एक घुसपैठ unordered_map का उपयोग करने के लिए देख रहा हूँ। किसी कारण से पुस्तकालय में केवल एक unordered_set है। एक घुसपैठ हैशटेबल भी है लेकिन मुझे यकीन नहीं है कि इसमें एक ही कार्यक्षमता है, इसके साथ ही यह एक ही इंटरफ़ेस नहीं है।
क्या मैं गलत हूं और मुझे unordered_map लिंक याद आया?
यदि मैं नहीं हूं तो एक ट्यूटोरियल है जो मुझे एक को लागू करने में मदद करेगा?Boost.Intrusive और unordered_map
उत्तर
यह एक दिलचस्प सवाल है। Boost.Intrusive किसी भी नक्शा इंटरफेस, आदेश दिया या unordered प्रदान नहीं प्रतीत होता है। इसमें कई कार्यान्वयन प्रकार हैं जो ठीक काम करेंगे क्योंकि नक्शे दोनों (लाल-काले पेड़, एवीएल पेड़, स्प्ले पेड़) और अनियंत्रित (हैशटेबल्स)। लेकिन कोई नक्शा नहीं था और मैं आपको क्यों नहीं बता सका।
- बस
hashtable
का उपयोग करें::आप के रूप में मैं इसे देख पास दो विकल्प हैं अव्यवस्थित कंटेनर hashtables के रूप में लागू कर रहे हैं (और एकमात्र कारण वे बुलाया नहीं कर रहे हैं
hash_map
पूर्व के साथ नाम टकराव से बचने के लिए है पहले से ही उस नाम का उपयोग कर मौजूदा पुस्तकालय)। यदि आप अपना काम पूरा करना चाहते हैं तो यह काम करेगा। - यदि आप वास्तव में अपना खुद का कार्यान्वयन करना चाहते हैं, तो आप Boost.Intrusive के unordered_set के इंटरफ़ेस विवरण को देखना चाहते हैं। मैंने कार्यान्वयन को नहीं देखा है, लेकिन यह लगभग एक या अधिक वृक्ष प्रकारों के आसपास एक आवरण है।
std::set
औरstd::map
दोनों आम तौर पर एक लाल-काले पेड़ के चारों ओर रैपर के रूप में लागू होते हैं (सभी मानक लाइब्रेरी कार्यान्वयन में मैंने देखा है: जीसीसी, एमएसवीसी, और अपाचे के stdcxx)। यह भी लें कि libstdC++<map>
में और<set>
में उनके पेड़ कार्यान्वयन को कैसे लपेटता है। यह बहुत सारे बॉयलरप्लेट है, इसमें से अधिकतर थकाऊ है लेकिन दोनों प्रकार पेड़ पर लगभग सभी कामों को रोक देते हैं। Boost.Intrusive केunordered_set
के साथ लगभग समान कुछ हो रहा है। आपको मानचित्र के बीच मतभेदों को देखने और इंटरफेस सेट करने की आवश्यकता होगी, और इसेunordered_set
कोunordered_map
में संशोधित करने के आधार के रूप में उपयोग करना होगा।
मैंने बाद में किया है। यह कठिन पक्ष पर थोड़ा सा है, और मैं अत्यधिक इसके लिए यूनिट परीक्षण लिखने की सिफारिश करता हूं (या libstdC++ या Boost.Intrusive के साथ आने वाले लोगों को चुरा रहा हूं)। लेकिन यह करने योग्य है। मैं भी अत्यधिक सेट और नक्शे के लिए आवश्यकताओं को दस्तावेजों को पढ़ने की सलाह, या तो एसजीआई (set, map) पर या के लिए libstdc++
अद्यतन: मुझे एहसास हुआ कि क्यों वे नक्शे नहीं कर रहे हैं: घुसपैठ कंटेनरों की आवश्यकता है कि आप एम्बेड उस डेटा प्रकार में डेटा संरचना के लिए नोड जानकारी जो आप इसमें संग्रहीत कर रहे हैं। नक्शे के लिए आपको यह मान और कुंजी दोनों मानों के लिए करना होगा। ऐसा नहीं है कि यह संभव नहीं है, लेकिन map
के लिए मानक कार्यान्वयन समान आंतरिक प्रकार set
एस के रूप में उपयोग करता है। लेकिन उन आंतरिक प्रकारों में केवल एकvalue_type
चर: स्टोर कुंजी और मूल्यों को स्टोर करने के लिए वे कुंजी और मान को उस चर में कॉपी करते हैं और नोड्स में स्टोर करते हैं। एक घुसपैठ प्रकार (यानी प्रतिलिपि के बिना) करने के लिए आपको उस कार्यान्वयन प्रकार को सेट के साथ असंगत करने के लिए संशोधित करना होगा: इसे अलग-अलग पर संदर्भों को संग्रहीत करना होगा। तो ऐसा करने के लिए आपको अपने द्वारा उपयोग किए जाने वाले कार्यान्वयन को भी संशोधित करना होगा (शायद hashtable
)। फिर असंभव नहीं है, लेकिन लाइब्रेरी डिज़ाइनर गंभीर कोड डुप्लिकेशन से बचने की कोशिश कर रहे हैं ताकि इसे लागू करने के सरल तरीके की अनुपस्थिति में उन्होंने संभवतः मानचित्र छोड़ने का निर्णय लिया है।
क्या यह समझ में आता है?
इस सवाल के बाद से यह काफी समय हो गया है, लेकिन मुझे लगता है कि यहां आने वाले लोगों को इस बारे में रुचि होनी चाहिए कि मानचित्र के रूप में unordered_set
का उपयोग कैसे करें। समाधान advanced insertions methods का उपयोग करना है: केवल एक को value_type
में एक कुंजी और उसका मान स्टोर करना होगा, और इसे insert_check
और insert_commit
का उपयोग करके डालें।
आपको तकनीकी रूप से उन्नत सम्मिलन की भी आवश्यकता नहीं है, आपको केवल उन्नत लुकअप की आवश्यकता है (खोजने के लिए (कुंजी))। –
- 1. unordered_map
- 2. unordered_map
- 3. unordered_map
- 4. unordered_map
- 5. सी ++ unordered_map
- 6. std :: unordered_map
- 7. std :: unordered_map
- 8. कॉन्स unordered_map
- 9. unordered_map (सी ++)
- 10. हैश_मैप और unordered_map के बीच अंतर?
- 11. decoupled संस्करण/unordered_map
- 12. unordered_map में बिडरेक्शनल इटरेटर्स?
- 13. आर-मूल्य आवेषण unordered_map
- 14. C++ unordered_map जी ++
- 15. SIGFPE जब unordered_map
- 16. std :: unordered_map प्रारंभिकरण
- 17. मानचित्र और unordered_map के बीच कैसे चयन करें?
- 18. सी ++ एसटीएल unordered_map कार्यान्वयन, संदर्भ वैधता
- 19. google :: dense_hash_map बनाम std :: tr1 :: unordered_map?
- 20. क्या unordered_map वास्तव में unordered है?
- 21. std :: unordered_map बहुत ही उच्च स्मृति उपयोग
- 22. जीसीसी 4.4/4.5 unique_ptr unordered_set/unordered_map
- 23. नक्शा unordered_map से बहुत तेज़ क्यों होगा?
- 24. std :: unordered_map :: insert का सरल रूप?
- 25. बढ़ावा :: unordered_map है ... आदेश दिया गया?
- 26. एसटीएल unordered_map __m128 मानों के साथ क्रैश
- 27. सी ++ 0x मानक में unordered_map होगा, यह unordered_map को बढ़ावा देने के साथ तुलना कैसे करता है?
- 28. भंडारण तत्वों उन्हें एक unordered_map में भंडारण बनाम
- 29. हैश से unordered_map में बाल्टी ढूंढें बिना किसी कुंजी
- 30. एक unordered_map का उपयोग करना जहां कुंजी टी
तो यह मुसीबत के लायक नहीं है? क्योंकि मैं यहां समय बनाम गुणवत्ता पर विचार कर रहा हूं। –
यह एक उचित मात्रा में काम है। मानक कंटेनरों के लिए इंटरफेस में बहुत सारी सूक्ष्मताएं हैं। मैं घुसपैठ कंटेनरों को उतना ही मानता हूं। यदि सार का समय विकल्प 1 के साथ जाता है। यदि आपके पास समय है और वास्तव में विकल्प 2 के साथ बहुत कुछ सीखना चाहते हैं। – quark
आपने कहा कि आपने इसे स्वयं किया है। क्या आप इसे साझा करना चाहते हैं? –