मानचित्र में C++ मानक टेम्पलेट लाइब्रेरी (STL)
मानचित्र क्या है? C++? वाक्यविन्यास
In C++तक एमएपी एक एसोसिएटिव कंटेनर है जो मैप किए गए फॉर्म में आइटम संग्रहीत करता है। मैप में प्रत्येक आइटम कुंजी-मूल्य और मैप किए गए मान से बना होता है। दो मैप किए गए मान समान कुंजी मान साझा नहीं कर सकते।
कुंजी मान तत्वों को विशिष्ट रूप से छांटने और पहचानने के लिए अच्छे होते हैं। मैप किए गए मान कुंजी से जुड़ी सामग्री को संग्रहीत करने के लिए होते हैं। दोनों प्रकार में भिन्न हो सकते हैं, लेकिन सदस्य प्रकार उन्हें एक जोड़ी प्रकार के माध्यम से जोड़ता है जो दोनों को जोड़ता है।
std::map का उपयोग क्यों करें?
मानचित्र का उपयोग करने के कारण इस प्रकार हैं:
- std:: map केवल चयनित सॉर्टिंग मानदंड के आधार पर क्रमबद्ध क्रम में अद्वितीय कुंजियों को संग्रहीत करता है।
- कुंजी का उपयोग करके तत्वों की खोज करना आसान और तेज़ है।
- प्रत्येक कुंजी से केवल एक तत्व जुड़ा होता है।
- std::map को एसोसिएटिव ऐरे के रूप में उपयोग किया जा सकता है।
- std::map बाइनरी वृक्षों (संतुलित) का उपयोग करके कार्यान्वित किया जा सकता है।
वाक्य - विन्यास
std::map घोषित करने के लिए इस सिंटैक्स का उपयोग करें:
std::map<key_datatype, value_datatype>map_name;
- RSI
key_datatype
मानचित्र कुंजियों के डेटा प्रकार को दर्शाता है। - RSI
value_datatype
मानचित्र कुंजियों के अनुरूप मानों के डेटा प्रकार को दर्शाता है। - RSI
map_name
यह मानचित्र का नाम है।
उदाहरण के लिए:
map<string, int> my_map;
हमने एक मानचित्र घोषित किया जिसका नाम है my_map
. मानचित्र में एक स्ट्रिंग होगी कुंजी डेटाटाइप और पूर्णांक के रूप में मानों डाटा प्रकार।
सदस्य प्रकार
सदस्य फ़ंक्शन निम्नलिखित सदस्य प्रकारों को पैरामीटर या रिटर्न प्रकार के रूप में उपयोग कर सकते हैं:
- कुंजी प्रकार: कुंजी (टेम्प्लेट में पहला पैरामीटर)
- मैप किया गया प्रकार: टी (टेम्प्लेट में दूसरा पैरामीटर)
- कुंजी_तुलना: तुलना करें (टेम्पलेट में तीसरा पैरामीटर)
- आवंटक_प्रकार: Alloc (टेम्पलेट में चौथा पैरामीटर)
- मान प्रकार: जोड़ा
- मूल्य_तुलना: तत्वों की तुलना के लिए नेस्टेड फ़ंक्शन क्लास
- संदर्भ: आबंटन_प्रकार::संदर्भ
- कॉन्स्ट_संदर्भ: आबंटन_प्रकार:: const_reference
- सूचक: आबंटन_प्रकार::सूचक
- const_पॉइंटर: आबंटन_प्रकार:: const_pointer
- पुनरावर्तक: value_type के लिए एक द्वि-दिशात्मक पुनरावर्तक
- const_इटरेटर: const value_type के लिए एक द्वि-दिशात्मक पुनरावर्तक
- रिवर्स_इटरेटर: एक रिवर्स इटरेटर
- const_रिवर्स_इटरेटर: एक निरंतर रिवर्स इटरेटर
- अंतर_प्रकार: ptrdiff_t
- आकार_प्रकार: आकार_t
std::map के अंतर्निहित फ़ंक्शन
std::map इनबिल्ट फ़ंक्शन के साथ आता है। इनमें से कुछ इस प्रकार हैं:
- शुरू करना() - यह फ़ंक्शन मानचित्र के प्रथम आइटम के लिए पुनरावर्तक लौटाता है।
- आकार() -यह फ़ंक्शन किसी मानचित्र में आइटमों की संख्या लौटाता है।
- खाली() -यह फ़ंक्शन बूलियन मान लौटाता है जो यह बताता है कि मानचित्र रिक्त है या नहीं।
- सम्मिलित करें(जोड़ी(कुंजी, मान)) – यह फ़ंक्शन किसी मैप में नया कुंजी-मान युग्म सम्मिलित करता है।
- खोजें(वैल्यू) – यह फ़ंक्शन val तत्व मिलने पर उसे इटरेटर देता है। अन्यथा, यह m.end() लौटाएगा।
- मिटाएँ (पुनरावर्तक स्थिति) – यह फ़ंक्शन इटरेटर द्वारा इंगित स्थान पर आइटम को हटा देता है।
- मिटाएँ(const g) - यह फ़ंक्शन किसी मैप से कुंजी-मान g को हटाता है।
- स्पष्ट () -यह फ़ंक्शन मानचित्र से सभी आइटम हटा देता है.
मानचित्र तत्वों पर पुनरावृत्ति
आप मैप तत्वों पर पुनरावृति कर सकते हैं। हमें बस एक पुनरावृतिकर्ता बनाने और इसके लिए इसका उपयोग करने की आवश्यकता है।
उदाहरण के लिए:
उदाहरण 1:
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); cout << "Map size is: " << Students.size() << endl; cout << endl << "Default map Order is: " << endl; for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) { cout << (*it).first << ": " << (*it).second << endl; } }
आउटपुट:
कोड का स्क्रीनशॉट यहां दिया गया है:
कोड स्पष्टीकरण:
- इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
- इसके फ़ंक्शन का उपयोग करने के लिए स्ट्रिंग हेडर फ़ाइल को हमारे कोड में शामिल करें।
- इसके कार्यों का उपयोग करने के लिए मानचित्र हेडर फ़ाइल को हमारे कोड में शामिल करें।
- std नामस्थान को हमारे कोड में शामिल करें ताकि इसे कॉल किए बिना इसके क्लासों का उपयोग किया जा सके।
- बुलाएं
main()
फ़ंक्शन. { फ़ंक्शन के मुख्य भाग की शुरुआत को चिह्नित करता है. - स्टूडेंट्स नाम से एक मानचित्र बनाएं जहां कुंजियां पूर्णांक होंगी, और मान स्ट्रिंग होंगे।
- मानचित्र में छात्र मान डालें। मानचित्र में 200 की कुंजी और ऐलिस का मान डाला जाएगा।
- मानचित्र में Students का मान डालें। मानचित्र में 201 की कुंजी और John का मान डाला जाएगा।
- उपयोग
size()
स्टूडेंट्स नामक मानचित्र का आकार प्राप्त करने के लिए फ़ंक्शन। इसे 2 लौटाना चाहिए। - कंसोल पर कुछ पाठ प्रिंट करें.
- फॉर लूप का उपयोग करके एक इटरेटर बनाएं, जो स्टूडेंट्स नामक मानचित्र के तत्वों पर पुनरावृति करेगा।
- कंसोल पर स्टूडेंट्स मानचित्र के मान प्रिंट करें।
- फॉर लूप के मुख्य भाग का अंत.
- शरीर का अंत
main()
समारोह.
std::map में डेटा सम्मिलित करना
आप std::map में आइटम दर्ज कर सकते हैं insert()
याद रखें कि std::map कुंजियाँ अद्वितीय होनी चाहिए।
इसलिए, यह सबसे पहले जाँचता है कि क्या प्रत्येक कुंजी मानचित्र में मौजूद है। यदि यह मौजूद है, तो प्रविष्टि सम्मिलित नहीं की जाएगी, लेकिन यह मौजूदा प्रविष्टि के लिए पुनरावर्तक लौटाता है। यदि यह मौजूद नहीं है, तो प्रविष्टि सम्मिलित की जाती है।
इस फ़ंक्शन में निम्नलिखित विविधताएं हैं:
- सम्मिलित करें(जोड़ी) – इस भिन्नता के साथ, कुंजी-मान युग्म को मानचित्र में डाला जाता है।
- सम्मिलित करें(प्रारंभ_आईटीआर, अंत_आईटीआर) – इस भिन्नता के साथ, प्रविष्टियाँ किसी अन्य मानचित्र से start_itr और end_itr द्वारा परिभाषित सीमा के भीतर डाली जाएंगी।
RSI इन्सर्ट_या_अस्सिंग() फ़ंक्शन उसी तरह काम करता है जैसे insert()
फ़ंक्शन, लेकिन यदि दी गई कुंजी पहले से ही मानचित्र में मौजूद है, तो इसका मान संशोधित किया जाएगा।
उदाहरण 2:
#include <map> #include <iostream> using namespace std; int main() { map<int, int> 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; }
आउटपुट:
कोड का स्क्रीनशॉट यहां दिया गया है:
कोड स्पष्टीकरण:
- इसके कार्यों का उपयोग करने के लिए मानचित्र हेडर फ़ाइल को हमारे कोड में शामिल करें।
- इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
- std नामस्थान को हमारे कोड में शामिल करें ताकि इसे कॉल किए बिना इसके क्लासों का उपयोग किया जा सके।
- बुलाएं
main()
फ़ंक्शन. { फ़ंक्शन के मुख्य भाग की शुरुआत को चिह्नित करता है. - m नामक एक मैप बनाएँ जहाँ कुंजियाँ पूर्णांक होंगी, और मान पूर्णांक होंगे। मैप में तीन प्रविष्टियाँ की गई हैं।
- मानचित्र में एक नई प्रविष्टि डालें। 5 की एक कुंजी और 6 का मान मानचित्र में डाला जाएगा।
- पहले से मौजूद कुंजी में प्रवेश करने का प्रयास किया जा रहा है। चूँकि कुंजी 1 पहले से ही मानचित्र में मौजूद है, इसलिए प्रवेश नहीं किया जाएगा।
- ऊपर दिए
insert_or_assign()
किसी मौजूदा प्रविष्टि को सम्मिलित या संशोधित करने के लिए फ़ंक्शन। चूँकि कुंजी 1 पहले से मौजूद है, इसलिए इसका मान 6 में बदल दिया जाएगा। - कंसोल पर कुछ टेक्स्ट प्रिंट करें। “\t” वर्ण एक क्षैतिज स्थान बनाता है जबकि “\n” वर्ण माउस कर्सर को अगली पंक्ति पर ले जाता है।
- उपयोग पाश के लिए m नामक मानचित्र के तत्वों पर पुनरावृति करने के लिए itr नामक एक पुनरावर्तक बनाना।
- कंसोल पर मैप m के मान प्रिंट करें। “\t” वर्ण प्रत्येक कुंजी और उसके संगत मान के बीच एक क्षैतिज स्थान बनाता है। इसके विपरीत, “\n” वर्ण प्रत्येक पुनरावृत्ति के बाद माउस कर्सर को अगली पंक्ति पर ले जाता है।
- लूप के मुख्य भाग का अंत.
- प्रोग्राम को सफलतापूर्वक पूरा होने पर मान लौटाना होगा।
- शरीर का अंत
main()
समारोह.
मानचित्र में खोजना
हम उपयोग कर सकते हैं find()
किसी मैप में तत्वों को उनकी कुंजियों के आधार पर खोजने के लिए फ़ंक्शन। यदि कुंजी नहीं मिलती है, तो फ़ंक्शन std::map::end लौटाता है। अन्यथा, खोजे गए तत्व का एक इटरेटर लौटाया जाएगा।
उदाहरण 3:
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); std::map<int, string>::iterator it = Students.find(201); if (it != Students.end()) { std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n'; } }
आउटपुट:
कोड का स्क्रीनशॉट यहां दिया गया है:
कोड स्पष्टीकरण:
- त्रुटियों के बिना इसके फ़ंक्शन का उपयोग करने के लिए हमारे कोड में iostream हेडर फ़ाइल शामिल करें।
- बिना किसी त्रुटि के इसके फ़ंक्शन का उपयोग करने के लिए स्ट्रिंग हेडर फ़ाइल को हमारे कोड में शामिल करें।
- त्रुटियों के बिना इसके फ़ंक्शन का उपयोग करने के लिए हमारे कोड में मैप हेडर फ़ाइल शामिल करें।
- std नामस्थान को हमारे कोड में शामिल करें ताकि इसे कॉल किए बिना इसके क्लासों का उपयोग किया जा सके।
- बुलाएं
main()
फ़ंक्शन. { फ़ंक्शन के मुख्य भाग की शुरुआत को चिह्नित करता हैmain()
समारोह. - स्टूडेंट्स नामक एक मानचित्र बनाएं जिसकी कुंजियाँ पूर्णांक और मान स्ट्रिंग होंगी।
- मानचित्र में छात्र मान डालें। मानचित्र में 200 की कुंजी और ऐलिस का मान डाला जाएगा।
- मानचित्र में Students का मान डालें। मानचित्र में 201 की कुंजी और John का मान डाला जाएगा।
- 201 की कुंजी से जुड़े मान को देखें।
- कुंजी का मान मिला है या नहीं, इसकी जांच करने के लिए if कथन का उपयोग करें।
- कंसोल पर कुछ पाठ के साथ कुंजी का मान प्रिंट करें।
- if कथन के मुख्य भाग का अंत.
- शरीर का अंत
main()
समारोह.
मानचित्र से डेटा हटाना
हम उपयोग कर सकते हैं erase()
मैप से मान हटाने के लिए फ़ंक्शन। हम बस एक इटरेटर बनाते हैं जो हटाए जाने वाले तत्व की ओर इशारा करता है। फिर इटरेटर को पास किया जाता है erase()
समारोह.
उदाहरण 4:
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<std::string, int> my_map; my_map.insert(std::make_pair("cow", 1)); my_map.insert(std::make_pair("cat", 2)); my_map["lion"] = 3; map<std::string, int>::iterator it = my_map.find("cat"); my_map.erase(it); for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it) cout << (*it).first << ": " << (*it).second << endl; return 0; }
आउटपुट:
कोड का स्क्रीनशॉट यहां दिया गया है:
कोड स्पष्टीकरण:
- इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
- इसके फ़ंक्शन का उपयोग करने के लिए स्ट्रिंग हेडर फ़ाइल को हमारे कोड में शामिल करें।
- इसके कार्यों का उपयोग करने के लिए मानचित्र हेडर फ़ाइल को हमारे कोड में शामिल करें।
- std नामस्थान को हमारे कोड में शामिल करें ताकि इसे कॉल किए बिना इसके क्लासों का उपयोग किया जा सके।
- बुलाएं
main()
फ़ंक्शन. { फ़ंक्शन के मुख्य भाग की शुरुआत को चिह्नित करता हैmain()
समारोह. - my_map नाम से एक मानचित्र बनाएं जिसकी कुंजियाँ स्ट्रिंग होंगी और मान पूर्णांक होंगे।
- मानचित्र my_map में मान डालें। मानचित्र में Cow की एक कुंजी और 1 का मान डाला जाएगा।
- मानचित्र my_map में मान डालें। मानचित्र में Cat की कुंजी और 2 का मान डाला जाएगा।
- my_map मानचित्र में एक सिंह कुंजी के साथ मान 3 जोड़ें।
- कुंजी cat की तलाश में मानचित्र my_map पर पुनरावृति करने के लिए एक पुनरावर्तक बनाएं।
- इटरेटर द्वारा इंगित तत्व को हटाएँ।
- मानचित्र my_map के तत्वों को शुरू से अंत तक पुनरावृत्त करने के लिए इटरेटर का उपयोग करें।
- कंसोल पर मानचित्र my_map की सामग्री को प्रिंट करें।
- प्रोग्राम को सफलतापूर्वक पूरा होने पर आउटपुट लौटाना होगा।
- शरीर का अंत
main()
समारोह.
सारांश
- मानचित्र एक सहयोगी कंटेनर है जो वस्तुओं को मैप किए गए रूप में संग्रहीत करता है।
- मानचित्र में प्रत्येक आइटम का एक कुंजी मान और एक मैप किया गया मान होता है।
- किसी मानचित्र में, दो मैप किए गए मान कुंजी मान साझा नहीं कर सकते।
- कुंजी मान तत्वों को विशिष्ट रूप से छांटने और पहचानने में मदद करते हैं।
- मैप किए गए मान कुंजी से संबद्ध सामग्री को संग्रहीत करने में सहायता करते हैं।
- C++ मानचित्र अद्वितीय कुंजियों को क्रमबद्ध क्रम में संग्रहीत करता है।
- काम साथ में करने केलिए C++ map में, हम तत्वों पर पुनरावृत्ति करने के लिए एक पुनरावर्तक बनाते हैं।
- इटरेटर के साथ, हम मानचित्र से आइटम खोजने और हटाने जैसे कार्य कर सकते हैं।