मैं सोच रहा था कि ढेर अवधारणा को एल्गोरिदम के रूप में लागू किया गया है (make_heap
, pop_heap
, push_heap
, sort_heap
) एक कंटेनर के बजाय। मुझे विशेष रूप से दिलचस्पी है कि किसी का समाधान यह भी समझा सकता है कि क्यों set
और map
एल्गोरिदम के समान संग्रह (make_set add_set rm_set आदि) के बजाय कंटेनर हैं।कंटेनरों के बजाय एल्गोरिदम के रूप में लागू सी ++ में ढेर क्यों हैं?
उत्तर
एसटीएल एक std :: primary_queue के रूप में एक ढेर प्रदान करता है। Make_heap, इत्यादि, फ़ंक्शंस वहां हैं क्योंकि उनके पास डेटा संरचना के दायरे के बाहर उपयोग होता है (उदाहरण के लिए सॉर्टिंग), और कस्टम संरचनाओं के शीर्ष पर ढेर बनाने की अनुमति देने के लिए (जैसे "शीर्ष 10 रखें" कंटेनर)।
समानता के अनुसार, आप एक क्रमबद्ध सूची को स्टोर करने के लिए std :: set का उपयोग कर सकते हैं, या आप std :: adjacent_find के साथ वेक्टर पर std :: sort का उपयोग कर सकते हैं; std :: sort अधिक सामान्य उद्देश्य है और अंतर्निहित डेटा संरचना के बारे में कुछ मान्यताओं को बनाता है।
(एक नोट के रूप में, std :: priority_queue कार्यान्वयन वास्तव में अपने स्वयं के भंडारण के लिए प्रदान नहीं करता है;। डिफ़ॉल्ट रूप से यह एक std :: अपने समर्थन की दुकान के रूप वेक्टर बनाता है)
खैर, ढेर वास्तव में एक सेट या नक्शा के समान अर्थ में एक सामान्य कंटेनर नहीं हैं। आमतौर पर, आप कुछ अन्य सार डेटा प्रकार को लागू करने के लिए एक ढेर का उपयोग करते हैं। (सबसे स्पष्ट प्राथमिकता कतार है।) मुझे संदेह है कि यह विभिन्न उपचार का कारण है।
एक स्पष्ट कारण यह है कि आप तत्वों को के अंदर एक और कंटेनर के रूप में व्यवस्थित कर सकते हैं।
तो आप make_heap()
पर vector
या deque
या यहां तक कि एक सी सरणी पर भी कॉल कर सकते हैं।
एक ढेर एक विशिष्ट डेटा संरचना है। मानक कंटेनरों में जटिलता की आवश्यकता होती है लेकिन यह निर्दिष्ट नहीं करती कि उन्हें कैसे कार्यान्वित किया जाना है। यह एक अच्छा लेकिन महत्वपूर्ण भेद है। आप कई अलग-अलग कंटेनर पर make_heap
कर सकते हैं, जिसमें आपने स्वयं लिखा है। लेकिन set
या map
का अर्थ केवल डेटा व्यवस्थित करने का एक तरीका है।
एक और तरीका कहा, एक मानक कंटेनर केवल अंतर्निहित डेटा संरचना से अधिक है।
हीप्स * अंतर्निहित डेटा संरचना के रूप में लगभग एक सरणी का उपयोग करके लागू किया जाता है। इस तरह इसे एल्गोरिदम का एक सेट माना जा सकता है जो सरणी डेटा संरचना पर काम करता है। यह वह रास्ता है जिसे एसटीएल ने ढेर को लागू करते समय लिया - यह किसी भी डेटा संरचना पर काम करेगा जिसमें यादृच्छिक अभिगम इटरेटर (मानक सरणी, वेक्टर, डेक इत्यादि) हैं।
आप यह भी देखेंगे कि एसटीएल प्राथमिकता_क्यू को एक कंटेनर की आवश्यकता होती है (जो डिफ़ॉल्ट रूप से एक वेक्टर है)। यह अनिवार्य रूप से आपके ढेर कंटेनर है - यह आपके अंतर्निहित डेटा संरचना पर एक ढेर लागू करता है और सभी सामान्य ढेर परिचालनों के लिए एक रैपर कंटेनर प्रदान करता है।
* विशेष रूप से बाइनरी ढेर। ढेर के अन्य रूप (द्विपक्षीय, फाइबोनैकी, आदि) नहीं हैं।
- 1. आप ढेर के बजाय ढेर पर स्मृति आवंटित क्यों करना चाहते हैं?
- 2. क्या जावा एल्गोरिदम सी या जावा में लागू हैं?
- 3. कंटेनरों में कच्चे सूचक के बजाय context_wrapper का उपयोग करने के लाभ?
- 4. दो अधिकतम ढेर विलय के लिए एल्गोरिदम?
- 5. PHP के यूजरोर्ट किस प्रकार के एल्गोरिदम लागू करते हैं?
- 6. सर्कुलर ऐरे के रूप में पंक्तियों को लागू क्यों करें?
- 7. क्यों कस्टम crouton शैलियों उनके निर्दिष्ट रंग के बजाय ग्रे के रूप में दिखाई देते हैं?
- 8. Matlab क्यों फोर्टन के बजाय सी में लिखा था?
- 9. सी ++ में उचित ढेर और ढेर उपयोग?
- 10. ढेर सी ++
- 11. क्या सी ++ रिफैक्टरिंग पैटर्न क्लैंग टूल्स के सेट के रूप में लागू किए गए हैं?
- 12. उद्देश्य सी में लागू श्रेणियां कैसे लागू की जाती हैं?
- 13. एक नए वेब सर्वर के बजाय फास्टसीजीआई के रूप में वेब एप्लिकेशन को कार्यान्वित क्यों करें?
- 14. क्या ऑब्जेक्ट के सदस्य चर हैं जो ढेर पर स्वचालित रूप से ढेर पर हैं?
- 15. क्यों सी ++ के आदर्श के रूप में यूक्लिडियन आदर्श चुकता
- 16. (सी) ढेर आवंटकों के लिए कार्यान्वयन रणनीति?
- 17. क्यों एमएफसी कंटेनरों पर एसटीएल कंटेनरों को प्राथमिकता दी जाती है?
- 18. कोई C++ के बजाय सी का उपयोग क्यों करेगा?
- 19. सी # उपज कथन लागू करने के लिए एल्गोरिदम
- 20. सी में sprintf() के बजाय कोई फ़ंक्शन?
- 21. स्ट्रिंग के बजाय फ़ाइल.न्यू प्रतीकों के तर्क क्यों नहीं हैं?
- 22. स्थिरांक और STL कंटेनरों में गैर स्थिरांक
- 23. रिलीज के बजाय एनडीईबीयूजी क्यों?
- 24. जेएमएल जावा में एनोटेशन के रूप में क्यों लागू नहीं किया गया है?
- 25. वाल्ग्रिंड का उपयोग कर सी में फ़ंक्शन के ढेर और ढेर के उपयोग को कैसे देखें?
- 26. गो में गोले के ढेर बनाम ढेर, और वे कैसे कचरा संग्रह से संबंधित हैं
- 27. एसओएल कंटेनरों को BOOST_CHECK_EQUAL के तर्क के रूप में कैसे पास किया जाए?
- 28. क्यों सी ++ एसटीएल
- 29. PHP के अंतर्निहित फ़ंक्शंस पैरामीटर के रूप में केवल तारों के बजाय स्थिरांक का उपयोग क्यों करते हैं?
- 30. ढेर और कतार, क्यों?
रिकॉर्ड के लिए, वहाँ एक ढेर है आधारित कंटेनर: 'priority_queue'। – avakar
क्यों नहीं? एक ढेर के लिए आप किसी भी यादृच्छिक अभिगम अनुक्रम का उपयोग कर सकते हैं। आपको एक विशेष कंटेनर का उपयोग करने के लिए मजबूर नहीं करना अच्छा है। किसी को चीजों को खत्म करने की कोशिश करनी चाहिए। नहीं, सेट और मानचित्र वास्तव में अनुक्रमों का उपयोग करके अच्छी तरह से काम नहीं करते हैं। उन लोगों के लिए वास्तविक बाइनरी पेड़ का उपयोग करना बहुत आसान है। – sellibitze
चूंकि कुछ लोगों को उलझन में लग रहा है: केटीएस डेटा संरचना [http://en.wikipedia.org/wiki/Heap_(data_structure)] को नि: शुल्क स्टोर नहीं कर रहा है। –