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

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

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

विशेषताएं

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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