मुझे लगता है कि एसटीएल के पेड़ नहीं होने के कई कारण हैं। मुख्य रूप से पेड़ एक पुनरावर्ती डेटा संरचना का एक रूप है, जो एक कंटेनर (सूची, वेक्टर, सेट) की तरह है, जिसमें बहुत अलग ठीक संरचना है जो सही विकल्प को मुश्किल बना देता है। वे एसटीएल का उपयोग करके मूल रूप में निर्माण करना भी बहुत आसान है।
एक परिमित जड़ वाले पेड़ को एक कंटेनर के रूप में सोचा जा सकता है जिसमें एक मूल्य या पेलोड है, एक वर्ग ए का उदाहरण और, जड़ (उप) पेड़ों का संभवतः खाली संग्रह; उप-पेड़ों के खाली संग्रह वाले पेड़ों को पत्तियों के रूप में माना जाता है।
template<class A>
struct unordered_tree : std::set<unordered_tree>, A
{};
template<class A>
struct b_tree : std::vector<b_tree>, A
{};
template<class A>
struct planar_tree : std::list<planar_tree>, A
{};
किसी को इटेरियर डिज़ाइन आदि के बारे में थोड़ा सोचना होगा और कौन से उत्पाद और सह-उत्पाद संचालन को पेड़ों के बीच परिभाषित करने और कुशल बनाने की अनुमति देता है - और मूल एसटीएल को अच्छी तरह से लिखना होगा - ताकि खाली सेट, वेक्टर या सूची कंटेनर है डिफ़ॉल्ट मामले में वास्तव में किसी भी पेलोड का खाली होना।
पेड़ कई गणितीय संरचनाओं में एक आवश्यक भूमिका निभाते हैं (कसाई, ग्रॉसमैन और लार्सन के शास्त्रीय कागजात देखें; उनके उदाहरणों के लिए कॉन्स और क्रिएमर के कागजात भी शामिल हो सकते हैं, और उनका उपयोग कैसे किया जाता है)। यह सोचना सही नहीं है कि उनकी भूमिका कुछ अन्य कार्यों को सुविधाजनक बनाने के लिए है। बल्कि वे डेटा संरचना के रूप में अपनी मौलिक भूमिका के कारण उन कार्यों को सुविधाजनक बनाते हैं।
हालांकि, पेड़ों के अलावा "सह-पेड़" भी हैं; सभी पेड़ों के ऊपर संपत्ति है कि यदि आप रूट को हटाते हैं तो आप सब कुछ हटा देते हैं।
पेड़ पर चलने वालों पर विचार करें, शायद उन्हें पुनरावृत्तियों के एक साधारण ढेर के रूप में महसूस किया जाएगा, एक नोड के लिए, और इसके मूल तक, ... जड़ तक।
template<class TREE>
struct node_iterator : std::stack<TREE::iterator>{
operator*() {return *back();}
...};
हालाँकि, आपके पास जितने हो सकते हैं; सामूहिक रूप से वे एक "वृक्ष" बनाते हैं, लेकिन जहां सभी तीर जड़ की ओर दिशा में बहते हैं, इस सह-वृक्ष को पुनरावृत्तियों के माध्यम से पुनरावृत्ति के माध्यम से पुनरावृत्त किया जा सकता है; हालाँकि, इसे पूरे या नीचे नेविगेट नहीं किया जा सकता है (अन्य पुनरावृत्तियों को इसकी जानकारी नहीं है) और न ही सभी उदाहरणों पर नज़र रखने के अलावा पुनरावृत्तियों को हटाया जा सकता है।
पेड़ अविश्वसनीय रूप से उपयोगी हैं, उनके पास बहुत सारी संरचना है, यह निश्चित रूप से सही दृष्टिकोण प्राप्त करने के लिए एक गंभीर चुनौती है। मेरे विचार में यह एसटीएल में लागू नहीं किया गया है। इसके अलावा, अतीत में, मैंने देखा है कि लोग धार्मिक होते हैं और एक प्रकार के कंटेनर का विचार पाते हैं, जिसमें उसके अपने प्रकार के चुनौतीपूर्ण उदाहरण हैं - लेकिन उन्हें इसका सामना करना पड़ता है - यही एक पेड़ प्रकार का प्रतिनिधित्व करता है - यह एक नोड है जिसमें एक है संभवतः (छोटे) पेड़ों का खाली संग्रह। वर्तमान भाषा चुनौती देती है कि बिना डिफॉल्ट कंस्ट्रक्टर उपलब्ध कराए इसे चुनौती दी जा सकती है कि ए आदि के container<B>
लिए ढेर (या कहीं और) पर जगह आवंटित न करें B
।
मैं एक के लिए खुश होऊंगा अगर यह एक अच्छा रूप है, मानक में अपना रास्ता ढूंढें।