मुझे एक दूसरे को कब चुनना चाहिए? क्या कोई पॉइंटर्स हैं जो आप सही एसटीएल कंटेनरों का उपयोग करने के लिए सिफारिश करेंगे?सी ++ एसटीएल में सेट और हैशसेट के बीच क्या अंतर है?
उत्तर
hash_set
एक ऐसा एक्सटेंशन है जो सी ++ मानक का हिस्सा नहीं है। set
के लिए लुकअप ओ (लॉग एन) के बजाय ओ (1) होना चाहिए, इसलिए यह ज्यादातर परिस्थितियों में तेज़ होगा।
जब आप कंटेनर के माध्यम से पुन: प्रयास करते हैं तो एक और अंतर दिखाई देगा। set
सॉर्ट किए गए क्रम में सामग्री वितरित करेगा, जबकि hash_set
अनिवार्य रूप से यादृच्छिक (धन्यवाद Lou Franco) होगा।
संपादित करें: C++ मानक को C++ 11 अपडेट unordered_set
पेश किया गया है जिसे hash_set
के बजाय प्राथमिकता दी जानी चाहिए। प्रदर्शन समान होगा और मानक द्वारा गारंटीकृत है। नाम में "unordered" जोर देकर कहते हैं कि यह किसी भी विशेष क्रम में परिणाम उत्पन्न करेगा।
इसके अलावा, सेट का आदेश दिया गया है। –
एक हैश_सेट एक हैश तालिका द्वारा कार्यान्वित किया जाएगा, जिसमें ज्यादातर ओ (1) संचालन होते हैं, जबकि एक सेट को किसी प्रकार के पेड़ (एवीएल, लाल काला, आदि) द्वारा लागू किया जाता है जिसमें ओ (लॉग एन) होता है। संचालन, लेकिन क्रमबद्ध क्रम में हैं।
संपादित करें: मैंने लिखा था कि पेड़ ओ (एन) हैं। यह पूरी तरह गलत है।
ओ (लॉग एन) – Andrey
लाल-काले पेड़ ओ (एन) हैं? –
ओह यीशु, मुझे विश्वास नहीं है कि मैंने ओ लिखा था (एन)। यह शायद सबसे कमजोर बात है जो मैंने पूरे दिन किया है। –
stl::set
एक बाइनरी खोज पेड़ के रूप में लागू किया गया है। hashset
एक हैश तालिका के रूप में लागू किया गया है।
मुख्य मुद्दा यह है कि बहुत से लोग stl::set
का उपयोग करते हैं, यह सोचते हुए कि यह ओ (1) की तलाश में हैश तालिका है, जो यह नहीं है, और नहीं है। यह देखने के लिए वास्तव में ओ (लॉग (एन)) है। अन्यथा जो डेटास्ट्रक्चर का बेहतर विचार पाने के लिए बाइनरी पेड़ बनाम हैश टेबल के बारे में पढ़ते हैं।
यह क्यों कम हो गया? - एक लाल-काला पेड़ एक प्रकार का बाइनरी खोज पेड़ है, और कल्पना यह नहीं कहती कि इसे लाल-काला होना चाहिए - यह केवल संचालन के लिए बड़े-ओ पैरामीटर सेट करता है। –
'stl :: set' क्या है? –
@LouFranco: शायद क्योंकि यह मानक-अनिवार्य व्यवहार/अर्थशास्त्र के बजाय [संभावित (संभावित!)] कार्यान्वयन पर चर्चा करता है। –
ध्यान में रखना एक और बात यह है कि हैश_सेट के साथ आपको हैश फ़ंक्शन प्रदान करना है, जबकि एक सेट को केवल तुलना फ़ंक्शन ('<') की आवश्यकता होती है जो परिभाषित करना आसान है (और देशी प्रकारों के लिए पूर्वनिर्धारित)।
देशी प्रकारों के लिए हैश फ़ंक्शन भी हैं। –
मुझे नहीं लगता कि किसी ने अभी तक प्रश्न के दूसरे भाग का उत्तर दिया है।
हैश_सेट या अनॉर्डर्ड_सेट का उपयोग करने का कारण आमतौर पर ओ (1) लुकअप टाइम होता है। मैं आम तौर पर कहता हूं क्योंकि हर बार, कार्यान्वयन के आधार पर, हैश को एक बड़े हैश सरणी में कॉपी करना पड़ सकता है, या हैश बाल्टी में हजारों प्रविष्टियां हो सकती हैं।
सेट का उपयोग करने का कारण यह है कि यदि आपको अक्सर सेट के सबसे बड़े या छोटे सदस्य की आवश्यकता होती है। एक हैश के पास कोई आदेश नहीं है इसलिए सबसे छोटी वस्तु को खोजने का कोई त्वरित तरीका नहीं है। एक पेड़ का आदेश होता है, इसलिए सबसे बड़ा या छोटा बहुत तेज़ होता है। ओ (लॉग एन) एक साधारण पेड़ के लिए, ओ (1) अगर यह सिरों को पॉइंटर्स रखता है।
- 1. स्कैला में 'हैशसेट' और 'सेट' के बीच का अंतर?
- 2. सी ++ एसटीएल सेट अंतर
- 3. एक्सकोड में सी/सी ++ लाइब्रेरी और एसटीएल सी ++ लाइब्रेरी के बीच क्या अंतर है?
- 4. पायथन में सेट और सूचियों के बीच क्या अंतर है?
- 5. सी ++ एसटीएल में एसटीएल
- 6. सेट <pair> और सी ++ में मानचित्र के बीच क्या अंतर है?
- 7. सी प्रोग्रामिंग में * और ऑपरेटरों के बीच क्या अंतर है?
- 8. वीबी और सी # में घटनाओं के बीच क्या अंतर है?
- 9. सी में क्वालीफायर और संशोधक के बीच क्या अंतर है?
- 10. सी # में सीएलआर और डीएलआर के बीच क्या अंतर है?
- 11. सी # में कॉन्स और स्टेटिक के बीच क्या अंतर है?
- 12. System.Type और System.RuntimeType के बीच सी # में क्या अंतर है?
- 13. सी में strtok_r और strtok_s के बीच क्या अंतर है?
- 14. सी # में वस्तुओं और कक्षाओं के बीच क्या अंतर है?
- 15. सी # में फ़ाइल और फ़ाइलइन्फो के बीच क्या अंतर है?
- 16. सी # में ToUpper() और ToUpperInvariant() के बीच क्या अंतर है?
- 17. xorg.conf, xset और xinput सेट के बीच क्या अंतर है?
- 18. प्रबंधित सी ++ और सी # के बीच क्या अंतर है?
- 19. सी ++ और विजुअल सी ++ के बीच क्या अंतर है?
- 20. सी और एम्बेडेड सी के बीच क्या अंतर है?
- 21. सी तारों और सी ++ तारों के बीच क्या अंतर है?
- 22. विज़ुअल सी ++ और सी ++ के बीच क्या अंतर है?
- 23. उद्देश्य-सी: केई और केपपथ के बीच क्या अंतर है?
- 24. एसटीएल कंटेनर - वेक्टर, सूची और डेक के बीच अंतर
- 25. सी ++ में एसटीएल सेट की अंतर्निहित डेटा संरचना क्या है?
- 26. (char) 0 और '\ 0' के बीच क्या अंतर है? सी
- 27. एएसपी.नेट और सी # के बीच क्या अंतर है?
- 28. उद्देश्य-सी: न्यूल, शून्य और @ "" के बीच क्या अंतर है?
- 29. सी #, .NET और सीएलआई के बीच क्या अंतर है?
- 30. "वीसी ++" और "सी ++" के बीच क्या अंतर है?
एसटीएल में कोई 'हैशसेट' नहीं है। अगले वर्ष सी ++ (उम्मीद है कि) में 'unordered_set' होगा। – avakar
इस बारे में बात करते हुए http://www.sgi.com/tech/stl/hash_set.html – kal
@mkal: यह मानक एसटीएल का हिस्सा नहीं है। 'हैश_सेट' एक एक्सटेंशन है। – kennytm