C++ अनॉर्डर्ड मैप का उपयोग कैसे करें

How Use C Unordered Map



एक नक्शा, जिसे एक सहयोगी सरणी के रूप में भी जाना जाता है, तत्वों की एक सूची है, जहां प्रत्येक तत्व एक कुंजी/मान जोड़ी है। तो, प्रत्येक कुंजी एक मान से मेल खाती है। साधारण काम के लिए अलग-अलग कुंजियों का मान समान हो सकता है। उदाहरण के लिए, चाबियाँ फलों की सूची और संबंधित मूल्यों, फलों के रंग हो सकती हैं। सी ++ में, मानचित्र को सदस्य कार्यों और ऑपरेटरों के साथ डेटा संरचना के रूप में कार्यान्वित किया जाता है। एक आदेशित नक्शा वह है जहां तत्व जोड़े को चाबियों द्वारा आदेश दिया गया है। एक अनियंत्रित नक्शा वह है जहां कोई आदेश नहीं है। यह लेख बताता है कि C++ बिना क्रम के मानचित्र का उपयोग कैसे करें, जिसे unordered_map के रूप में लिखा गया है। इस आलेख को समझने के लिए आपको C++ पॉइंटर्स में ज्ञान की आवश्यकता है। unordered_map C++ मानक पुस्तकालय का हिस्सा है।

वर्ग और वस्तुएं

एक वर्ग चर और कार्यों का एक समूह है जो एक साथ काम करते हैं, जहां चर के लिए मान निर्दिष्ट नहीं होते हैं। जब वेरिएबल्स को मान असाइन किए जाते हैं, तो क्लास एक ऑब्जेक्ट बन जाती है। एक ही वर्ग को दिए गए विभिन्न मूल्यों का परिणाम अलग-अलग वस्तुओं में होता है; यानी, अलग-अलग वस्तुएं अलग-अलग मूल्यों के साथ एक ही वर्ग हैं। कहा जाता है कि किसी क्लास से ऑब्जेक्ट बनाना ऑब्जेक्ट को इंस्टेंट करना है।







नाम, unordered_map, एक वर्ग है। unordered_map वर्ग से बनाई गई वस्तु में प्रोग्रामर का चुना हुआ नाम होता है।



एक वर्ग से संबंधित एक फ़ंक्शन को कक्षा से किसी वस्तु को तुरंत चालू करने की आवश्यकता होती है। सी ++ में, उस फ़ंक्शन का नाम वर्ग के नाम के समान होता है। प्रोग्रामर द्वारा कक्षा से बनाई गई (तत्काल) वस्तुओं को अलग-अलग नाम दिए गए हैं।



कक्षा से एक वस्तु बनाने का अर्थ है वस्तु का निर्माण करना; इसका अर्थ तत्काल करना भी है।





एक C++ प्रोग्राम जो unordered_map वर्ग का उपयोग करता है, फ़ाइल के शीर्ष पर निम्न पंक्तियों से शुरू होता है:

#शामिल
#शामिल
नेमस्पेस एसटीडी का उपयोग करना;

पहली पंक्ति इनपुट/आउटपुट के लिए है। दूसरी पंक्ति प्रोग्राम को unordered_map वर्ग की सभी सुविधाओं का उपयोग करने की अनुमति देना है। तीसरी पंक्ति प्रोग्राम को मानक नामस्थान में नामों का उपयोग करने की अनुमति देती है।



किसी फ़ंक्शन को ओवरलोड करना

जब दो या दो से अधिक भिन्न फ़ंक्शन हस्ताक्षरों का एक ही नाम होता है, तो उस नाम को अतिभारित कहा जाता है। जब एक फ़ंक्शन को कॉल किया जाता है, तो संख्या और प्रकार के तर्क, यह निर्धारित करते हैं कि वास्तव में कौन सा फ़ंक्शन निष्पादित किया गया है।

कंस्ट्रक्शन/कॉपी कंस्ट्रक्शन

सरल निर्माण

एक अनियंत्रित मानचित्र का निर्माण किया जा सकता है और मूल्यों को निम्नानुसार सौंपा जा सकता है:

unordered_map<स्थिरांक char*, स्थिरांक char**उमापी;

उमापी['केला'] = 'पीला';
उमापी['अंगूर'] = 'हरा';
उमापी['अंजीर'] = 'नील लोहित रंग का';

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

unordered_map<स्थिरांक char*, स्थिरांक char**उमापी({{'केला', 'पीला'},
{'अंगूर', 'हरा'}, {'अंजीर', 'नील लोहित रंग का'}});

इनिशियलाइज़र_लिस्ट असाइन करके निर्माण
उदाहरण:

unordered_map<स्थिरांक char*, स्थिरांक char**उमापी= {{'केला', 'पीला'},
{'अंगूर', 'हरा'}, {'अंजीर', 'नील लोहित रंग का'}};

एक और unordered_map की प्रतिलिपि बनाकर निर्माण
उदाहरण:

unordered_map<स्थिरांक char*, स्थिरांक char**umap1({{'केला', 'पीला'},
{'अंगूर', 'हरा'}, {'अंजीर', 'नील लोहित रंग का'}});
unordered_map<स्थिरांक char*, स्थिरांक char**umap2(umap1);

जोड़ी तत्व

निम्नलिखित कोड दिखाता है कि जोड़ी तत्व कैसे बनाएं और एक्सेस करें:

जोड़ा<char, स्थिरांक char**जनसंपर्क= {'डी', 'होना'};
लागत<<जनसंपर्कप्रथम << 'एन';
लागत<<जनसंपर्कदूसरा << 'एन';

आउटपुट है:

डी
होना

जोड़ी में दो मदों के लिए पहला और दूसरा आरक्षित शब्द हैं। जोड़ी में मान अभी भी पहले और दूसरे का उपयोग करके बदला जा सकता है।

अनियंत्रित मानचित्र के विषय में एक जोड़ी को value_type कहा जाता है।

unordered_map एलिमेंट एक्सेस

मैप्ड_टाइप और ऑपरेटर [] (key_type&& k)
संबंधित कुंजी का मान लौटाता है। उदाहरण:

unordered_map<स्थिरांक char*, स्थिरांक char**उमापी;

उमापी['केला'] = 'पीला';
उमापी['अंगूर'] = 'हरा';
उमापी['अंजीर'] = 'नील लोहित रंग का';

स्थिरांक char *अधिकार=उमापी['अंगूर'];

लागत<<अधिकार<<'एन';

आउटपुट है: हरा। मान उसी तरह असाइन किए जा सकते हैं - ऊपर देखें।

unordered_map क्षमता

size_type size () const noexcept
मानचित्र में युग्मों की संख्या लौटाता है।

unordered_map<स्थिरांक char*, स्थिरांक char**उमापी;

उमापी['केला'] = 'पीला';
उमापी['अंगूर'] = 'हरा';
उमापी['अंजीर'] = 'नील लोहित रंग का';

लागत<<उमापआकार() <<'एन';

आउटपुट 3 है।

बूल खाली () कॉन्स्ट नोएक्सेसेप्ट

यदि मानचित्र में कोई युग्म नहीं है, तो सत्य के लिए 1 लौटाता है, और यदि इसमें जोड़े हैं तो असत्य के लिए 0 देता है। उदाहरण:

unordered_map<स्थिरांक char*, स्थिरांक char**उमापी;
लागत<<उमापखाली() <<'एन';

आउटपुट 1 है।

रिटर्निंग इटरेटर्स और अनॉर्डर्ड-मैप क्लास

एक पुनरावर्तक एक सूचक की तरह है लेकिन सूचक की तुलना में अधिक कार्यक्षमता है।

शुरू () कोई अपवाद नहीं

एक पुनरावर्तक देता है जो मानचित्र ऑब्जेक्ट की पहली जोड़ी को इंगित करता है, जैसा कि निम्न कोड खंड में है:

unordered_map<स्थिरांक char*, स्थिरांक char**उमापी;

उमापी['केला'] = 'पीला';उमापी['अंगूर'] = 'हरा';उमापी['अंजीर'] = 'नील लोहित रंग का';

unordered_map<स्थिरांक char*, स्थिरांक char**::इटरेटरआईटीईआर=उमापशुरू();
जोड़ा<स्थिरांक char*, स्थिरांक char**जनसंपर्क= *आईटीईआर;
लागत<<जनसंपर्कप्रथम << ',' <<जनसंपर्कदूसरा << 'एन';

आउटपुट है: अंजीर, बैंगनी। नक्शा अनियंत्रित है।

शुरू () बिना किसी अपवाद के;

एक पुनरावर्तक देता है जो मानचित्र ऑब्जेक्ट संग्रह के पहले तत्व को इंगित करता है। जब ऑब्जेक्ट कंस्ट्रक्शन कॉन्स्ट से पहले होता है, तो एक्सप्रेशन स्टार्ट () कॉन्स्ट को स्टार्ट () के बजाय निष्पादित किया जाता है। इस शर्त के तहत, वस्तु में तत्वों को संशोधित नहीं किया जा सकता है। इसका उपयोग निम्नलिखित कोड में किया जाता है, उदाहरण के लिए।

स्थिरांकunordered_map<स्थिरांक char*, स्थिरांक char**उमापी({{'केला', 'पीला'},
{'अंगूर', 'हरा'}, {'अंजीर', 'नील लोहित रंग का'}});

unordered_map<स्थिरांक char*, स्थिरांक char**::const_iteratorआईटीईआर=उमापशुरू();
जोड़ा<स्थिरांक char*, स्थिरांक char**जनसंपर्क= *आईटीईआर;
लागत<<जनसंपर्कप्रथम << ',' <<जनसंपर्कदूसरा << 'एन';

आउटपुट है: अंजीर, बैंगनी। नक्शा अनियंत्रित है। ध्यान दें कि इस बार लौटाए गए पुनरावर्तक को प्राप्त करने के लिए, केवल पुनरावर्तक के बजाय, const_iterator का उपयोग किया गया है।

अंत () कोई अपवाद नहीं

एक पुनरावर्तक लौटाता है जो मानचित्र वस्तु के अंतिम तत्व से तुरंत आगे की ओर इशारा करता है।

अंत () स्थिरांक कोई अपवाद नहीं है

एक पुनरावर्तक लौटाता है जो मानचित्र वस्तु के अंतिम तत्व से तुरंत आगे की ओर इशारा करता है। जब नक्शा ऑब्जेक्ट निर्माण कॉन्स्ट से पहले होता है, तो एक्सप्रेशन एंड () कॉन्स्ट को एंड () के बजाय निष्पादित किया जाता है।

unordered_map संचालन

इटरेटर ढूंढें (कॉन्स्ट की_टाइप और के)

मानचित्र में दी गई कुंजी के एक जोड़े की खोज करता है। यदि यह पाया जाता है, तो यह पुनरावर्तक लौटाता है। यदि नहीं मिला, तो यह एक पुनरावर्तक लौटाता है जो मानचित्र के अंत की ओर इशारा करता है, जो एक जोड़ी नहीं है। निम्न कोड दिखाता है कि इस सदस्य फ़ंक्शन का उपयोग कैसे करें:

unordered_map<char,char>उमापी;

उमापी['प्रति'] = 'बी';उमापी['सी'] = 'डी';उमापी['और'] = 'एफ';

unordered_map<char,char> ::इटरेटरआईटीईआर=उमापपाना('सी');
अगर (उमापपाना('सी') ! =उमापसमाप्त())
{
जोड़ा<char,char>जनसंपर्क= *आईटीईआर;
लागत<<जनसंपर्कप्रथम << ',' <<जनसंपर्कदूसरा << 'एन';
}

आउटपुट है: सी, डी

const_iterator ढूँढें (const key_type& k) const;

फ़ंक्शन के इस संस्करण को कहा जाता है, यदि अनियंत्रित मानचित्र का निर्माण कॉन्स्ट से शुरू होता है, जिससे मानचित्र के सभी तत्व केवल-पढ़ने के लिए होते हैं।

unordered_map संशोधक

जोड़ी डालें (value_type&& obj)
एक अनियंत्रित मानचित्र का अर्थ है कि जोड़े किसी भी क्रम में नहीं हैं। इसलिए, प्रोग्राम जोड़ी को किसी भी स्थान पर सम्मिलित करता है जो उसे सुविधाजनक लगता है। फ़ंक्शन रिटर्न, जोड़ी। यदि सम्मिलन सफल रहा, तो बूल सत्य के लिए 1 होगा, अन्यथा यह असत्य के लिए 0 होगा। यदि सम्मिलन सफल होता है, तो पुनरावर्तक नए सम्मिलित तत्व को इंगित करेगा। निम्नलिखित कोड उपयोग को दर्शाता है:

unordered_map<स्थिरांक char*, स्थिरांक char**उमापी;

उमापी['केला'] = 'पीला';
उमापी['अंगूर'] = 'हरा';
उमापी['अंजीर'] = 'नील लोहित रंग का';

उमापडालने({{'चेरी', 'जाल'}, {'स्ट्रॉबेरी', 'जाल'}});

लागत<<उमापआकार() << 'एन';

आउटपुट है: 5. एक से अधिक जोड़े डाले जा सकते हैं।

size_type मिटाएं (स्थिरांक key_type और k)

यह फ़ंक्शन unordered_map से एक जोड़ी को मिटा देता है। निम्नलिखित कोड खंड दिखाता है:

unordered_map<स्थिरांक char*, स्थिरांक char**उमापी;

उमापी['केला'] = 'पीला';
उमापी['अंगूर'] = 'हरा';
उमापी['अंजीर'] = 'नील लोहित रंग का';

NSएक पर=उमापमिटा('अंगूर');

लागत<<उमापआकार() << 'एन';

आउटपुट 2 है।
शून्य स्वैप (unordered_map&)
दो अनियंत्रित मानचित्रों की अदला-बदली की जा सकती है, जैसा कि इस कोड खंड में दिखाया गया है:

unordered_map<स्थिरांक char*, स्थिरांक char**umap1= {{'केला', 'पीला'},
{'अंगूर', 'हरा'}, {'अंजीर', 'नील लोहित रंग का'}, {'स्ट्रॉबेरी', 'जाल'}};

unordered_map<स्थिरांक char*, स्थिरांक char**umap2= {{'चेरी', 'जाल'}, {'चूना', 'हरा'}};

umap1.विनिमय(umap2);

unordered_map<स्थिरांक char*, स्थिरांक char**::इटरेटरiter1=umap1.शुरू();
जोड़ा<स्थिरांक char*, स्थिरांक char**पीआर1= *iter1;
unordered_map<स्थिरांक char*, स्थिरांक char**::इटरेटरiter2=umap2.शुरू();
जोड़ा<स्थिरांक char*, स्थिरांक char**पीआर2= *iter2;

लागत<< 'उमप1 की पहली कुंजी और आकार:'<<पीआर1प्रथम <<','<<umap1.आकार() << 'एन';
लागत<< 'उमप2 ​​की पहली कुंजी और आकार'<<पीआर2.प्रथम <<','<<umap2.आकार() << 'एन';
unordered_map<स्थिरांक char*, स्थिरांक char**umap1= {{'केला', 'पीला'},
{'अंगूर', 'हरा'}, {'अंजीर', 'नील लोहित रंग का'}, {'स्ट्रॉबेरी', 'जाल'}};
unordered_map<स्थिरांक char*, स्थिरांक char**umap2= {{'चेरी', 'जाल'}, {'चूना', 'हरा'}};

umap1.विनिमय(umap2);

unordered_map<स्थिरांक char*, स्थिरांक char**::इटरेटरiter1=umap1.शुरू();
जोड़ा<स्थिरांक char*, स्थिरांक char**पीआर1= *iter1;
unordered_map<स्थिरांक char*, स्थिरांक char**::इटरेटरiter2=umap2.शुरू();
जोड़ा<स्थिरांक char*, स्थिरांक char**पीआर2= *iter2;

लागत<< 'उमप1 की पहली कुंजी और आकार:'<<पीआर1प्रथम <<','<<umap1.आकार() << 'एन';
लागत<< 'उमप2 ​​की पहली कुंजी और आकार'<<पीआर2.प्रथम <<','<<umap2.आकार() << 'एन';

आउटपुट है:

umap1 की पहली कुंजी और आकार: चूना, 2

umap2 स्ट्रॉबेरी की पहली कुंजी और आकार, 4

नक्शा अनियंत्रित है। ध्यान दें कि यदि आवश्यक हो तो मानचित्र की लंबाई बढ़ा दी जाती है। डेटा प्रकार समान होना चाहिए।

वर्ग और उसकी तात्कालिक वस्तुएँ

एक डेटा प्रकार के लिए एक मान है, क्योंकि एक तत्काल वस्तु एक वर्ग के लिए है। अनियंत्रित नक्शा निर्माण एक वर्ग को डेटा प्रकार के रूप में भी स्वीकार कर सकता है। निम्नलिखित कार्यक्रम इसे दर्शाता है:

#शामिल
#शामिल
नेमस्पेस एसटीडी का उपयोग करना;

कक्षा
{
सह लोक:
NSएक पर;
स्थिर charचौधरी;

शून्यसमारोह(charनहीं, स्थिरांक char *पी)
{
लागत<< 'वहां ' <<एक पर<< 'मूल्यवान पुस्तकें' <<नहीं<<पी<< ' दुकान में।' << 'एन';
}
स्थिर शून्यमज़ा(charचौधरी)
{
अगर (चौधरी== 'प्रति')
लागत<< 'आधिकारिक स्थिर सदस्य समारोह' << 'एन';
}
};

NSमुख्य()
{
TheCla obj1;TheCla obj2;TheCla obj3;TheCla obj4;TheCla obj5;

unordered_map<स्थिरांक char*,द क्लास>उमापी;
उमापी= {{'केला',obj1}, {'अंगूर',obj2}, {'अंजीर',obj3}, {'स्ट्रॉबेरी',obj4}, {'चूना',obj5}};

लागत<<उमापआकार() << 'एन';

वापसी 0;
}

आउटपुट है: 5.

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

मानचित्र का अनुप्रयोग

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

मानचित्र का निर्माण

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

निष्कर्ष

एक नक्शा, जिसे एक सहयोगी सरणी के रूप में भी जाना जाता है, तत्वों की एक सूची है, जहां प्रत्येक तत्व एक कुंजी/मान जोड़ी है। तो, प्रत्येक कुंजी एक मान से मेल खाती है। सी ++ में, मानचित्र को सदस्य कार्यों और ऑपरेटरों के साथ डेटा संरचना के रूप में कार्यान्वित किया जाता है। एक आदेशित नक्शा वह है जहां तत्व जोड़े को चाबियों द्वारा आदेश दिया गया है। एक अनियंत्रित नक्शा वह है जहां कोई आदेश नहीं है।

तकनीकी रूप से, हैश में जोड़ी तत्व होते हैं। वास्तव में, जोड़ी अपने सदस्य कार्यों और ऑपरेटरों के साथ एक संपूर्ण डेटा संरचना है। जोड़ी के लिए दो टेम्प्लेट पैरामीटर unordered_map के लिए समान दो टेम्प्लेट पैरामीटर हैं।

मानचित्र के लिए इनिशियलाइज़र_लिस्ट शाब्दिक का एक सरणी शाब्दिक है। प्रत्येक आंतरिक शाब्दिक में दो वस्तुएं होती हैं, कुंजी/मान जोड़ी।

unordered_map के सदस्य कार्यों और ऑपरेटरों को निम्नलिखित शीर्षकों के तहत वर्गीकृत किया जा सकता है: unordered_map निर्माण/प्रतिलिपि निर्माण, unordered_map क्षमता, unordered_map iterator, unordered_map संचालन, और unordered_map संशोधक।

एक अनियंत्रित मानचित्र का उपयोग तब किया जाता है जब किसी कुंजी को किसी मान पर मैप करना होता है।

क्राइसो