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

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

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

विशेषताएं

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

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

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

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

! rowspan=6 | संशोधक ! rowspan=5 | लुकउप ! rowspan=2 | प्रेक्षक
 * कंटेंट्स को क्लियर करता है।.
 * एलिमेंट्स को इन्सर्ट करता है।
 * Constructs elements in-place (C++11)
 * Constructs elements in-place using a hint (C++11)
 * एलिमेंट्स को इरेज करता है।
 * कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
 * एलिमेंट्स को इन्सर्ट करता है।
 * Constructs elements in-place (C++11)
 * Constructs elements in-place using a hint (C++11)
 * एलिमेंट्स को इरेज करता है।
 * कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
 * Constructs elements in-place (C++11)
 * Constructs elements in-place using a hint (C++11)
 * एलिमेंट्स को इरेज करता है।
 * कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
 * Constructs elements in-place (C++11)
 * Constructs elements in-place using a hint (C++11)
 * एलिमेंट्स को इरेज करता है।
 * कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
 * Constructs elements in-place using a hint (C++11)
 * एलिमेंट्स को इरेज करता है।
 * कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
 * Constructs elements in-place using a hint (C++11)
 * एलिमेंट्स को इरेज करता है।
 * कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
 * एलिमेंट्स को इरेज करता है।
 * कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
 * एलिमेंट्स को इरेज करता है।
 * कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
 * कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
 * कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
 * कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
 * कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
 * कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
 * कंटेंट्स को दूसरे कंटेनर से स्वैप करता है।
 * विशिष्ट कुंजी से युग्मित होने वाले एलिमेंट्स की संख्या रिटर्न करता है।
 * {| class="wikitable"
 * विशिष्ट कुंजी के साथ एलिमेंट को फाइंड करता है।
 * }
 * विशिष्ट कुंजी से युग्मित होने वाले एलिमेंट्स की श्रेणी रिटर्न करता है।
 * Returns an iterator to the first element with a key not less than the given value.
 * Returns an iterator to the first element with a key greater than a certain value.
 * {| class="wikitable"
 * विशिष्ट कुंजी के साथ एलिमेंट को फाइंड करता है।
 * }
 * विशिष्ट कुंजी से युग्मित होने वाले एलिमेंट्स की श्रेणी रिटर्न करता है।
 * Returns an iterator to the first element with a key not less than the given value.
 * Returns an iterator to the first element with a key greater than a certain value.
 * विशिष्ट कुंजी से युग्मित होने वाले एलिमेंट्स की श्रेणी रिटर्न करता है।
 * Returns an iterator to the first element with a key not less than the given value.
 * Returns an iterator to the first element with a key greater than a certain value.
 * विशिष्ट कुंजी से युग्मित होने वाले एलिमेंट्स की श्रेणी रिटर्न करता है।
 * Returns an iterator to the first element with a key not less than the given value.
 * Returns an iterator to the first element with a key greater than a certain value.
 * Returns an iterator to the first element with a key not less than the given value.
 * Returns an iterator to the first element with a key greater than a certain value.
 * Returns an iterator to the first element with a key not less than the given value.
 * Returns an iterator to the first element with a key greater than a certain value.
 * Returns an iterator to the first element with a key not less than the given value.
 * Returns an iterator to the first element with a key greater than a certain value.
 * Returns an iterator to the first element with a key greater than a certain value.
 * Returns an iterator to the first element with a key greater than a certain value.
 * Returns an iterator to the first element with a key greater than a certain value.
 * Returns an iterator to the first element with a key greater than a certain value.
 * Returns an iterator to the first element with a key greater than a certain value.
 * Returns an iterator to the first element with a key greater than a certain value.
 * Returns the key comparison function.
 * की कम्पेरिज़न फ़ंक्शन रिटर्न करता है।  और   में यह फ़ंक्शन   के समतुल्य है, क्योंकि एलिमेंट केवल कुंजी से बने होते हैं।
 * }
 * Returns the key comparison function.
 * की कम्पेरिज़न फ़ंक्शन रिटर्न करता है।  और   में यह फ़ंक्शन   के समतुल्य है, क्योंकि एलिमेंट केवल कुंजी से बने होते हैं।
 * }
 * की कम्पेरिज़न फ़ंक्शन रिटर्न करता है।  और   में यह फ़ंक्शन   के समतुल्य है, क्योंकि एलिमेंट केवल कुंजी से बने होते हैं।
 * }
 * की कम्पेरिज़न फ़ंक्शन रिटर्न करता है।  और   में यह फ़ंक्शन   के समतुल्य है, क्योंकि एलिमेंट केवल कुंजी से बने होते हैं।
 * }
 * की कम्पेरिज़न फ़ंक्शन रिटर्न करता है।  और   में यह फ़ंक्शन   के समतुल्य है, क्योंकि एलिमेंट केवल कुंजी से बने होते हैं।
 * }

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

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

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

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

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

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

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

यह भी देखें

 * कंटेनर (एब्स्ट्रैक्ट डेटा प्रकार)
 * मानक टेम्प्लेट लाइब्रेरी#कंटेनर
 * अनऑर्डड ऍसोसियेटिव कंटेनर (C++)