उदाहरण के साथ C ++ मानक टेम्पलेट लाइब्रेरी (STL) में मानचित्र

विषय - सूची:

Anonim

Std :: मैप क्या है?

C ++ में, MAP एक एसोसिएटेड कंटेनर है जो मैप किए गए फॉर्म में आइटम स्टोर करता है। नक्शे में प्रत्येक आइटम कुंजी-मूल्य और एक मैप किए गए मूल्य से बना है। दो मैप किए गए मान समान कुंजी मान साझा नहीं कर सकते।

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

इस C ++ ट्यूटोरियल में, आप सीखेंगे:

  • Std :: मैप क्या है?
  • Std :: map का उपयोग क्यों करें?
  • वाक्य - विन्यास:
  • सदस्य प्रकार:
  • अंतर्निहित कार्य
  • मैप एलिमेंट्स पर Iterating
  • Std में डेटा सम्मिलित करना :: मानचित्र:
  • एक मानचित्र में खोज
  • मानचित्र से डेटा हटाना

Std :: map का उपयोग क्यों करें?

यहाँ, मानचित्र का उपयोग करने के कारण हैं:

  • एसटीडी :: नक्शा केवल छांटे गए मानदंडों के आधार पर क्रमबद्ध क्रम में अद्वितीय कुंजियों को संग्रहीत करता है।
  • कुंजी का उपयोग करने वाले तत्वों की खोज करना आसान और तेज़ है।
  • प्रत्येक कुंजी में केवल एक तत्व जुड़ा हुआ है।
  • std :: मानचित्र का उपयोग एक सहयोगी सरणी के रूप में किया जा सकता है।
  • एसटीडी :: नक्शा द्विआधारी पेड़ों (संतुलित) का उपयोग करके लागू करने योग्य है।

वाक्य - विन्यास:

Std :: map घोषित करने के लिए, इस सिंटैक्स का उपयोग करें:

std::mapmap_name;
  • Key_datatype मानचित्र कुंजियों के डेटाटाइप को दर्शाता है।
  • Value_datatype मानचित्र कुंजियों के अनुरूप मानों के डेटाटाइप को दर्शाता है।
  • Map_name नक्शे का नाम है।

उदाहरण के लिए:

map my_map;

हमने my_map नाम का एक नक्शा घोषित किया। मानचित्र में मुख्य डेटाटाइप के रूप में एक स्ट्रिंग और मान डेटाटाइप के रूप में पूर्णांक होगा ।

सदस्य प्रकार:

सदस्य फ़ंक्शन निम्न सदस्यों प्रकारों को या तो पैरामीटर या वापसी प्रकार के रूप में उपयोग कर सकते हैं:

  • key_type: Key (टेम्पलेट में पहला पैरामीटर)
  • mapped_type: T (टेम्पलेट में दूसरा पैरामीटर)
  • key_compare: तुलना (टेम्पलेट में तीसरा पैरामीटर)
  • एलोकेटर_टाइप : एलोक (टेम्पलेट में चौथा पैरामीटर)
  • value_type: pair
  • value_compare: तत्वों की तुलना करने के लिए नेस्टेड फंक्शन क्लास
  • संदर्भ: आवंटनकर्ता_ संदर्भ :: संदर्भ
  • const_reference: आवंटितकर्ता_टाइप :: const_reference
  • पॉइंटर: एलोकेटर_टाइप :: पॉइंटर
  • const_pointer: आवंटितकर्ता_प्रकार :: const_pointer
  • इटरेटर: VALUE_TYPE करने के लिए एक द्वि-दिशात्मक इटरेटर
  • const_iterator: const value_type के लिए एक द्वि-दिशात्मक पुनरावृत्ति
  • Rev_iterator: रिवर्स इटरेटर
  • const_reverse_iterator: एक निरंतर उल्टा चलने वाला
  • अंतर_टाइप : ptrdiff_t
  • size_type: size_t

अंतर्निहित कार्य

std :: मैप इनबिल्ट फंक्शन के साथ आता है। इनमें से कुछ में शामिल हैं:

  • start () - यह फ़ंक्शन मैप के पहले आइटम में इट्रेटर लौटाता है।
  • आकार () - यह फ़ंक्शन किसी मैप में आइटमों की संख्या लौटाता है।
  • खाली () - यह फ़ंक्शन बूलियन मान लौटाता है, जिसमें दर्शाया गया है कि कोई मानचित्र खाली है।
  • इन्सर्ट (जोड़ी (की, वेल्यू)) - यह फंक्शन नए की-वैल्यू पेयर को मैप में इन्सर्ट करता है।
  • find (val) - यह फंक्शन वेल एलीमेंट को इट्रेटर देता है यदि यह पाया जाता है। अन्यथा, यह m.end () लौटेगा।
  • मिटाएँ (पुनरावृत्ति स्थिति) - यह फ़ंक्शन आइटम को पुनरावृत्त द्वारा इंगित की गई स्थिति में हटा देता है।
  • erase (const g) - यह फ़ंक्शन मैप से की-वैल्यू g को हटाता है।
  • Clear () - यह फ़ंक्शन एक मैप से सभी आइटम हटाता है।

मैप एलिमेंट्स पर Iterating

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

उदाहरण 1:

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));cout << "Map size is: " << Students.size() << endl;cout << endl << "Default map Order is: " << endl;for (map::iterator it = Students.begin(); it != Students.end(); ++it) {cout << (*it).first << ": " << (*it).second << endl;}}

आउटपुट:

यहाँ कोड का एक स्क्रीनशॉट है:

कोड स्पष्टीकरण:

  1. अपने कार्यों का उपयोग करने के लिए हमारे कोड में iostream हेडर फ़ाइल शामिल करें।
  2. अपने कार्यों का उपयोग करने के लिए हमारे कोड में स्ट्रिंग हेडर फ़ाइल शामिल करें।
  3. अपने कार्यों का उपयोग करने के लिए हमारे कोड में मैप हेडर फ़ाइल शामिल करें।
  4. इसे कॉल किए बिना अपनी कक्षाओं का उपयोग करने के लिए हमारे कोड में std नाम स्थान शामिल करें।
  5. मुख्य () फ़ंक्शन को कॉल करें। {फ़ंक्शन के शरीर की शुरुआत के निशान।
  6. छात्रों के नाम का एक नक्शा बनाएँ जहाँ कुंजियाँ पूर्णांक होंगी, और मान स्ट्रिंग होंगे।
  7. मानचित्र में मान डालें छात्र। 200 की एक कुंजी और ऐलिस का मान मानचित्र में डाला जाएगा।
  8. मानचित्र में मान डालें छात्र। 201 की एक कुंजी और जॉन के मूल्य को मानचित्र में डाला जाएगा।
  9. छात्र नाम के नक्शे का आकार पाने के लिए आकार () फ़ंक्शन का उपयोग करें। यह एक 2 लौटना चाहिए।
  10. कंसोल पर कुछ टेक्स्ट प्रिंट करें।
  11. छात्रों के नाम के नक्शे के तत्वों पर पुनरावृति करने के लिए एक इटेटर बनाने के लिए लूप के लिए उसका उपयोग करें।
  12. मानचित्र के मान को सांत्वना पर छात्र प्रिंट करें।
  13. लूप के लिए शरीर का अंत।
  14. मुख्य () फ़ंक्शन के शरीर का अंत।

एसटीडी :: मानचित्र में डेटा सम्मिलित करना

आप सम्मिलित करें () फ़ंक्शन का उपयोग करके आइटम को std :: मैप में दर्ज कर सकते हैं। याद रखें कि std :: मानचित्र कुंजियाँ अद्वितीय होनी चाहिए।

तो, यह पहले जाँचता है कि क्या प्रत्येक कुंजी मानचित्र में मौजूद है। यदि यह मौजूद है, तो प्रविष्टि नहीं डाली जाएगी, लेकिन यह मौजूदा प्रविष्टि के लिए पुनरावृत्ति देता है। यदि यह मौजूद नहीं है, तो प्रविष्टि डाली जाती है।

फ़ंक्शन में निम्न विविधताएँ हैं:

  • सम्मिलित (जोड़ी) - इस भिन्नता के साथ, एक कुंजी-मूल्य जोड़ी नक्शे में डाली जाती है।
  • सम्मिलित करें (start_itr, end_itr) - इस भिन्नता के साथ, प्रविष्टियाँ start_itr और end_itr द्वारा दूसरे मानचित्र से परिभाषित सीमा के भीतर डाली जाएंगी।

Insert_or_assing () समारोह के रूप में डालने () फ़ंक्शन उसी तरह से काम करता है, लेकिन अगर किसी कुंजी पहले से ही नक्शे में मौजूद है, अपने मूल्य संशोधित किया जाएगा।

उदाहरण 2:

#include #include using namespace std;int main() {map m{ {1,3} , {2,4} , {3,5} };m.insert({ 5, 6 });m.insert({ 1, 8 });m.insert_or_assign(1, 6);cout << "Key\tElement\n";for (auto itr = m.begin(); itr != m.end(); ++itr) {cout << itr->first << '\t' << itr->second << '\n';}return 0;}

आउटपुट:

यहाँ कोड का एक स्क्रीनशॉट है:

कोड स्पष्टीकरण:

  1. अपने कार्यों का उपयोग करने के लिए हमारे कोड में मैप हेडर फ़ाइल शामिल करें।
  2. अपने कार्यों का उपयोग करने के लिए हमारे कोड में iostream हेडर फ़ाइल शामिल करें।
  3. इसे कॉल किए बिना अपनी कक्षाओं का उपयोग करने के लिए हमारे कोड में std नाम स्थान शामिल करें।
  4. मुख्य () फ़ंक्शन को कॉल करें। {फ़ंक्शन के शरीर की शुरुआत के निशान।
  5. M नाम का एक मानचित्र बनाएँ जहाँ कुंजियाँ पूर्णांक होंगी, और मान पूर्णांक होंगे। नक्शे में तीन प्रविष्टियाँ बनाई गई हैं।
  6. मैप में एक नई प्रविष्टि डालें। 5 की कुंजी और 6 के मान को मानचित्र में डाला जाएगा।
  7. पहले से मौजूद कुंजी में एक प्रविष्टि बनाने की कोशिश कर रहा है। चूंकि कुंजी 1 पहले से ही नक्शे में मौजूद है, इसलिए प्रवेश नहीं किया जाएगा।
  8. मौजूदा प्रविष्टि को सम्मिलित या संशोधित करने के लिए insert_or_assign () फ़ंक्शन का उपयोग करना। चूंकि कुंजी 1 पहले से मौजूद है, इसलिए इसका मान 6 में बदल दिया जाएगा।
  9. कंसोल पर कुछ टेक्स्ट प्रिंट करें। "\ N" वर्ण क्षैतिज स्थान बनाता है जबकि "\ n" वर्ण माउस कर्सर को अगली पंक्ति में ले जाता है।
  10. नाम के नक्शे के तत्वों पर पुनरावृति करने के लिए itr नाम का एक इट्रेटर बनाने के लिए लूप के लिए उपयोग करें।
  11. कंसोल पर मैप m के मान को प्रिंट करें। "\ T" वर्ण प्रत्येक कुंजी और उसके संबंधित मान के बीच एक क्षैतिज स्थान बनाता है। इसके विपरीत, "\ n" वर्ण हर पुनरावृत्ति के बाद माउस कर्सर को अगली पंक्ति में ले जाता है।
  12. एक पाश के लिए शरीर का अंत।
  13. कार्यक्रम सफल होने पर मूल्य वापस करना चाहिए।
  14. मुख्य () फ़ंक्शन के शरीर का अंत।

एक मानचित्र में खोज

हम मानचित्र में तत्वों की खोज के लिए उनकी कुंजियों द्वारा खोज () फ़ंक्शन का उपयोग कर सकते हैं। यदि कुंजी नहीं मिली है, तो फ़ंक्शन std :: map :: end देता है। अन्यथा, खोजे गए तत्व का एक पुनरावर्तक वापस कर दिया जाएगा।

उदाहरण 2:

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));std::map::iterator it = Students.find(201);if (it != Students.end()) {std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n';}}

आउटपुट:

यहाँ कोड का एक स्क्रीनशॉट है:

कोड स्पष्टीकरण:

  1. त्रुटियों को प्राप्त किए बिना अपने कार्यों का उपयोग करने के लिए हमारे कोड में iostream हेडर फ़ाइल शामिल करें।
  2. त्रुटियों के बिना अपने कार्यों का उपयोग करने के लिए हमारे कोड में स्ट्रिंग हेडर फ़ाइल शामिल करें।
  3. त्रुटियों के बिना अपने कार्यों का उपयोग करने के लिए हमारे कोड में मैप हेडर फ़ाइल शामिल करें।
  4. इसे कॉल किए बिना अपनी कक्षाओं का उपयोग करने के लिए हमारे कोड में std नाम स्थान शामिल करें।
  5. मुख्य () फ़ंक्शन को कॉल करें। {मुख्य () फ़ंक्शन के शरीर की शुरुआत के निशान।
  6. उन विद्यार्थियों के नाम का एक मानचित्र बनाएँ जिनकी कुंजियाँ पूर्णांक और मान स्ट्रिंग होंगे।
  7. मानचित्र में मान डालें छात्र। 200 की एक कुंजी और ऐलिस का मान मानचित्र में डाला जाएगा।
  8. मानचित्र में मान डालें छात्र। 201 की एक कुंजी और जॉन के मूल्य को मानचित्र में डाला जाएगा।
  9. 201 की कुंजी के साथ जुड़े मूल्य के लिए देखो।
  10. कुंजी के लिए मान पाया जाता है या नहीं यह जांचने के लिए एक कथन का उपयोग करें।
  11. कंसोल पर कुछ पाठ के साथ कुंजी के मूल्य को प्रिंट करें।
  12. अगर बयान के शरीर का अंत।
  13. मुख्य () फ़ंक्शन के शरीर का अंत।

मानचित्र से डेटा हटाना

हम किसी मानचित्र से मान हटाने के लिए मिटा () फ़ंक्शन का उपयोग कर सकते हैं। हम बस एक पुनरावृत्ति बनाते हैं जो हटाए जाने वाले तत्व को इंगित करता है। पुनरावृत्त को मिटा () फ़ंक्शन में दिया जाता है।

उदाहरण 3:

#include #include #include using namespace std;int main() {map my_map;my_map.insert(std::make_pair("cow", 1));my_map.insert(std::make_pair("cat", 2));my_map["lion"] = 3;map::iterator it = my_map.find("cat");my_map.erase(it);for (map::iterator it = my_map.begin(); it != my_map.end(); ++it)cout << (*it).first << ": " << (*it).second << endl;return 0;}

आउटपुट:

यहाँ कोड का एक स्क्रीनशॉट है:

कोड स्पष्टीकरण:

  1. अपने कार्यों का उपयोग करने के लिए हमारे कोड में iostream हेडर फ़ाइल शामिल करें।
  2. अपने कार्यों का उपयोग करने के लिए हमारे कोड में स्ट्रिंग हेडर फ़ाइल शामिल करें।
  3. अपने कार्यों का उपयोग करने के लिए हमारे कोड में मैप हेडर फ़ाइल शामिल करें।
  4. इसे कॉल किए बिना अपनी कक्षाओं का उपयोग करने के लिए हमारे कोड में std नाम स्थान शामिल करें।
  5. मुख्य () फ़ंक्शन को कॉल करें। {मुख्य () फ़ंक्शन के शरीर की शुरुआत के निशान।
  6. एक नक्शा बनाएं जिसका नाम my_map है जिसकी कुंजी तार और मान पूर्णांक होंगे।
  7. मानचित्र my_map में मान डालें। गाय की एक कुंजी और 1 का मान मानचित्र में डाला जाएगा।
  8. मानचित्र my_map में मान डालें। कैट की एक कुंजी और 2 का मान मानचित्र में डाला जाएगा।
  9. एक शेर की कुंजी के साथ my_map मानचित्र में एक मान 3 जोड़ें।
  10. मुख्य बिल्ली की तलाश में my_map नक्शे पर पुनरावृति करने के लिए एक पुनरावृत्त बनाएं।
  11. पुनरावृत्ति द्वारा इंगित तत्व को हटाएं।
  12. मानचित्र के तत्वों पर शुरू से अंत तक पुनरावृति करने के लिए एक पुनरावृत्ति का उपयोग करें।
  13. कंसोल पर मैप my_map की सामग्री को प्रिंट करें।
  14. कार्यक्रम को सफल समापन पर आउटपुट वापस करना होगा।
  15. मुख्य () फ़ंक्शन के शरीर का अंत।

सारांश:

  • नक्शा एक साहचर्य कंटेनर है जो मैप किए गए रूप में वस्तुओं को संग्रहीत करता है।
  • मानचित्र में प्रत्येक आइटम का एक महत्वपूर्ण मूल्य और एक मैप किया गया मान है।
  • मानचित्र में, दो मैप किए गए मान महत्वपूर्ण मान साझा नहीं कर सकते हैं।
  • मुख्य मान विशिष्ट रूप से तत्वों को छाँटने और पहचानने में मदद करते हैं।
  • मैप किए गए मान कुंजी से जुड़ी सामग्री को संग्रहीत करने में मदद करते हैं।
  • सी ++ मानचित्र क्रमबद्ध क्रम में अद्वितीय कुंजियों को संग्रहीत करता है।
  • C ++ मैप के साथ काम करने के लिए, हम तत्वों पर पुनरावृति करने के लिए एक पुनरावृत्ति बनाते हैं।
  • पुनरावृत्ति के साथ, हम मानचित्र से आइटम खोजने और हटाने जैसे कार्य कर सकते हैं।