सहयोगी कंटेनर

कंप्यूटिंग में, सहयोगी कंटेनर C++ प्रोग्रामिंग भाषा के C++ मानक पुस्तकालय में वर्ग टेम्पलेट्स के समूह को संदर्भित करता है जो ऑर्डड ऍसोसियेटिव ऐरे को कार्यान्वित करता है। टेम्प्लेट (प्रोग्रामिंग) होने के कारण उनका उपयोग आर्बिटरी तत्वों जैसे इन्टिजर अथवा कस्टम क्लासेज को संग्रहीत करने के लिए किया जा सकता है। निम्नलिखित कंटेनरों को सी ++ मानक के वर्तमान संशोधन में परिभाषित किया गया है-,  ,  ,. इनमें से प्रत्येक कंटेनर मात्र उनके तत्वों पर रखी गई बाधाओं पर भिन्न होता है।

सहयोगी कंटेनर सी ++ मानक पुस्तकालय में अनऑर्डड ऍसोसियेटिव कंटेनर (सी ++) के समान होते हैं, मात्र अंतर यह है कि उनके नाम के रूप में अनऑर्डड ऍसोसियेटिव कंटेनर उनके तत्वों को व्यवस्थित नहीं करते हैं।

विशेषताएं

 * कुंजी की विशिष्टता-  और   में प्रत्येक कुंजी अद्वितीय होनी चाहिए।   और   पर यह प्रतिबंध नहीं होता है।
 * एलिमेंट संघटन-  और   में प्रत्येक तत्व कुंजी और मैप किए गए मान से बने है।   और   में प्रत्येक तत्व कुंजी है; मैप किए गए मान नहीं हैं।
 * एलिमेंट ऑर्डरिंग- एलिमेंट स्ट्रिक्ट वीक ऑर्डरिंग का पालन करते हैं

सहयोगी कंटेनरों को अनुक्रम कंटेनरों के विपरीत उनकी कुंजी द्वारा विशेष रूप से इसके एलिमेंट्स को एक्सेस करने के लिए डिज़ाइन किया गया है, जो तत्वों को उनकी स्थिति से एक्सेस करने में अधिक कुशल हैं। सहयोगी कंटेनरों को प्रविष्टि, विलोपन और परीक्षण के संचालन का आश्वासन दिया जाता है कि लॉगरिदमिक समय - ओ (लॉग एन) में कोई तत्व है अथवा नहीं है। इस प्रकार वे सामान्यतः सेल्फ-बैलेंसिंग बाइनरी सर्च ट्री का उपयोग करके कार्यान्वित किए जाते हैं और द्विदिश पुनरावृत्ति का समर्थन करते हैं। इटरेटर्स और इरेज किये गए तत्वों के रिफरेन्सेस को छोड़कर, इन्सर्ट और इरेज के संचालन से इटरेटर और रिफरेन्स (सी ++) अमान्य नहीं होते हैं। सहयोगी कंटेनरों की परिभाषित विशेषता यह है कि तत्वों को पूर्व-निर्धारित क्रम में इन्सर्ट किया जाता है, जैसे सॉर्टेड असेंडिंग में इन्सर्ट किया जाता है। सहयोगी कंटेनरों को दो उपसमूहों मैप और सेट में विभाजित किया जा सकता है। मैप को कभी-कभी डिक्शनरी के रूप में संदर्भित किया जाता है जिसमें की/ वैल्यू पेअर होते है। अनुक्रम को व्यवस्थित करने के लिए कुंजी का उपयोग किया जाता है और मान उस कुंजी से एसोसिएट होता है। उदाहरण के लिए, एक मानचित्र में पाठ में प्रत्येक अद्वितीय शब्द का प्रतिनिधित्व करने वाली कुंजियाँ हो सकती हैं और पाठ में उस शब्द के प्रकट होने की संख्या का प्रतिनिधित्व करने वाले मान। सेट मात्र अद्वितीय तत्वों का आरोही कंटेनर होता है। और  मात्र कुंजी या तत्व के 1 उदाहरण को कंटेनर में इन्सर्ट करने की अनुमति प्रदान करते हैं। यदि तत्वों के एकाधिक उदाहरणों की आवश्यकता होती है तो   या   का उपयोग किया जाता है। मैप और सेट दोनों द्विदिश इटरेटर्स का समर्थन करते हैं। इटरेटर्स के संबंध में अधिक जानकारी के लिए, इटरेटर्स देखें। जबकि आधिकारिक तौर पर मानक टेम्पलेट लाइब्रेरी मानक का हिस्सा नहीं है,  और   आमतौर पर खोज समय को बेहतर बनाने के लिए उपयोग किया जाता है। ये कंटेनर अपने तत्वों को हैश तालिका के रूप में संग्रहीत करते हैं, प्रत्येक तालिका प्रविष्टि में तत्वों की द्विदिश लिंक्ड सूची होती है। सबसे तेज़ खोज समय (O(1)) सुनिश्चित करने के लिए, सुनिश्चित करें कि आपके तत्वों के लिए हैशिंग एल्गोरिथ्म समान रूप से वितरित हैश मान लौटाता है।

प्रदर्शन
सहयोगी कंटेनरों पर लागू किए जा सकने वाले संचालन की स्पर्शोन्मुख जटिलता इस प्रकार है:

कार्यों का अवलोकन
कंटेनरों को कंटेनरों के नाम के शीर्षकों में परिभाषित किया जाता है, उदा. शीर्षलेख में परिभाषित किया गया है. सभी कंटेनर कंटेनर अवधारणा (जेनेरिक प्रोग्रामिंग) की आवश्यकताओं को पूरा करते हैं, जिसका अर्थ है कि उनके पास है,  ,  ,  ,  , और   तरीके।

उपयोग
निम्नलिखित कोड दर्शाता है कि कैसे उपयोग करना है  शब्दों की घटनाओं की गणना करने के लिए। यह शब्द को कुंजी के रूप में और मूल्य के रूप में गिनती का उपयोग करता है। निष्पादित होने पर, प्रोग्राम उपयोगकर्ता को रिक्त स्थान से अलग किए गए शब्दों की एक श्रृंखला टाइप करने देता है, और इनपुट के अंत को इंगित करने के लिए एक शब्द समाप्त होता है। तब उपयोगकर्ता यह पूछने के लिए एक शब्द इनपुट कर सकता है कि यह पहले से दर्ज श्रृंखला में कितनी बार हुआ है।

उपरोक्त उदाहरण यह भी दर्शाता है कि ऑपरेटर  यदि कुंजी के साथ कोई संबद्ध नहीं है, तो नक्शे में नई वस्तुओं (डिफ़ॉल्ट निर्माता का उपयोग करके) सम्मिलित करता है। तो अभिन्न प्रकार शून्य-प्रारंभिक होते हैं, तारों को खाली तारों आदि में प्रारंभ किया जाता है।

निम्नलिखित उदाहरण सम्मिलित फ़ंक्शन का उपयोग करके मानचित्र में तत्वों को सम्मिलित करने और मानचित्र इटरेटर और खोज फ़ंक्शन का उपयोग करके एक कुंजी खोजने के लिए दिखाता है:

ऊपर दिखाया गया उदाहरण द्वारा प्रदान किए गए कुछ कार्यों के उपयोग को प्रदर्शित करता है, जैसे कि   (तत्व को मानचित्र में रखें),   (नक्शे से तत्व निकालें),   (कंटेनर में तत्व की उपस्थिति की जांच करें), आदि।

जब प्रोग्राम एक्जीक्यूट किया जाता है, तो छह तत्वों का उपयोग करके डाला जाता है  फ़ंक्शन, तो पहले तत्व का उपयोग करके हटा दिया जाता है   फ़ंक्शन और मानचित्र का आकार आउटपुट होता है। इसके बाद, उपयोगकर्ता को मानचित्र में खोजने के लिए एक कुंजी के लिए कहा जाता है। पहले बनाए गए इटरेटर का उपयोग करके,   फ़ंक्शन दिए गए कुंजी वाले तत्व की खोज करता है। यदि यह कुंजी पाता है, तो प्रोग्राम तत्व के मान को प्रिंट करता है। यदि यह नहीं मिलता है, तो मानचित्र के अंत में एक पुनरावर्तक वापस आ जाता है और यह आउटपुट करता है कि कुंजी नहीं मिली। अंत में पेड़ के सभी तत्वों का उपयोग करके मिटा दिया जाता है.

इटरेटर
मानचित्र कंटेनर में विशिष्ट तत्वों को इंगित करने के लिए पुनरावृत्तियों का उपयोग कर सकता है। एक पुनरावर्तक तत्व की कुंजी और मैप किए गए मान दोनों तक पहुंच सकता है:

नीचे पुनरावृत्तियों का उपयोग करके सभी कुंजियों और मानों को प्रदर्शित करने के लिए मानचित्र के माध्यम से लूपिंग का एक उदाहरण दिया गया है: जीसीसी कंपाइलर पर उपरोक्त नमूने को संकलित करने के लिए, विशिष्ट मानक चयन ध्वज का उपयोग करना चाहिए। यह चाबियों द्वारा क्रमबद्ध, पूरे मानचित्र की कुंजी और मान आउटपुट करेगा।

यह भी देखें

 * कंटेनर (सार डेटा प्रकार)
 * मानक टेम्प्लेट लाइब्रेरी#कंटेनर
 * अक्रमित सहयोगी कंटेनर (C++)|अक्रमित सहयोगी कंटेनर C++