मानचित्र में C++ मानक टेम्पलेट लाइब्रेरी (STL)

⚡ स्मार्ट सारांश

मानचित्र में C++ यह स्टैंडर्ड टेम्प्लेट लाइब्रेरी का एक एसोसिएटिव कंटेनर है जो तत्वों को सॉर्ट किए गए कुंजी-मान युग्मों के रूप में संग्रहीत करता है, जहां प्रत्येक अद्वितीय कुंजी एक मान से मैप होती है और तेज़ लुकअप, सम्मिलन और क्रमबद्ध ट्रैवर्सल को सक्षम बनाती है।

  • सहयोगात्मक कंटेनर: A C++ map आइटम को कुंजी-मान युग्मों के रूप में संग्रहीत करता है, जिसमें अद्वितीय, स्वचालित रूप से क्रमबद्ध कुंजियाँ होती हैं।
  • 🧩 शीर्षक और वाक्य संरचना: मैप हेडर को शामिल करें, फिर std::map घोषित करें टाइप किए गए युग्मों को संग्रहीत करने के लिए नाम।
  • अंतर्निहित कार्य: begin(), size(), empty(), insert(), find(), erase(), और clear() मैप की सामग्री को प्रबंधित करते हैं।
  • 🔄 पुनरावृत्ति: एक द्विदिशात्मक पुनरावर्तक मानचित्र तत्वों को पढ़ने या हटाने के लिए क्रमबद्ध कुंजी क्रम में देखता है।
  • 🔑 अद्वितीय कुंजियाँ: दो तत्व एक कुंजी साझा नहीं कर सकते, जो एक मैप को एसोसिएटिव ऐरे के रूप में आदर्श बनाता है।
  • 🤖 एआई सहायता: GitHub Copilot और इसी तरह के AI सहायक एक छोटी टिप्पणी से मानचित्र घोषणाओं और लूपों का ढांचा तैयार करते हैं।

मानचित्र में C++ एसटीएल

मानचित्र क्या है? C++?

In C++मैप (MAP) एक एसोसिएटिव कंटेनर है जो आइटम्स को मैप किए गए रूप में स्टोर करता है। मैप में प्रत्येक आइटम एक कुंजी मान और एक मैप किया गया मान से मिलकर बना होता है। दो मैप किए गए मान एक ही कुंजी मान साझा नहीं कर सकते।

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

कोई भी कोड लिखने से पहले, यह जानना मददगार होता है कि मैप अक्सर सही कंटेनर क्यों होता है।

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

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

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

इन लाभों का उपयोग करने के लिए, घोषणा वाक्यविन्यास से शुरुआत करें।

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

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

std::map<key_datatype, value_datatype>map_name; 
  • RSI कुंजी_डेटाटाइप मानचित्र कुंजियों के डेटा प्रकार को दर्शाता है।
  • RSI मान_डेटाटाइप मानचित्र कुंजियों के अनुरूप मानों के डेटा प्रकार को दर्शाता है।
  • RSI मानचित्र_नाम यह मानचित्र का नाम है।

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

map<string, int> my_map; 

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

सदस्य प्रकार

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

  • कुंजी प्रकार: कुंजी (टेम्प्लेट में पहला पैरामीटर)
  • मैप किया गया प्रकार: T (टेम्प्लेट में दूसरा पैरामीटर)
  • कुंजी_तुलना: (टेम्प्लेट में तीसरे पैरामीटर की) तुलना करें
  • आवंटक_प्रकार: 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;
	}
}

आउटपुट:

C++ मैप पुनरावृति उदाहरण 1 आउटपुट

कोड का स्क्रीनशॉट यहां दिया गया है:

C++ मैप पुनरावृति उदाहरण 1 कोड

Code स्पष्टीकरण:

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

std::map में डेटा सम्मिलित करना

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

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

इस फ़ंक्शन में निम्नलिखित विविधताएं हैं:

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

insert_or_assign() फ़ंक्शन 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;
}

आउटपुट:

C++ मैप इन्सर्ट उदाहरण 2 आउटपुट

कोड का स्क्रीनशॉट यहां दिया गया है:

C++ मैप इन्सर्ट उदाहरण 2 कोड

Code स्पष्टीकरण:

  1. इसके कार्यों का उपयोग करने के लिए मानचित्र हेडर फ़ाइल को हमारे कोड में शामिल करें।
  2. इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
  3. std नामस्थान को हमारे कोड में शामिल करें ताकि इसे कॉल किए बिना इसके क्लासों का उपयोग किया जा सके।
  4. main() फ़ंक्शन को कॉल करें। { फ़ंक्शन के मुख्य भाग की शुरुआत को चिह्नित करता है।
  5. m नामक एक मैप बनाएँ जहाँ कुंजियाँ पूर्णांक होंगी, और मान पूर्णांक होंगे। मैप में तीन प्रविष्टियाँ की गई हैं।
  6. मानचित्र में एक नई प्रविष्टि डालें। 5 की एक कुंजी और 6 का मान मानचित्र में डाला जाएगा।
  7. पहले से मौजूद कुंजी में प्रवेश करने का प्रयास किया जा रहा है। चूँकि कुंजी 1 पहले से ही मानचित्र में मौजूद है, इसलिए प्रवेश नहीं किया जाएगा।
  8. insert_or_assign() फ़ंक्शन का उपयोग करके किसी मौजूदा प्रविष्टि को सम्मिलित या संशोधित किया जा रहा है। चूंकि कुंजी 1 पहले से मौजूद है, इसलिए इसका मान बदलकर 6 कर दिया जाएगा।
  9. कंसोल पर कुछ टेक्स्ट प्रिंट करें। “\t” वर्ण एक क्षैतिज स्थान बनाता है जबकि “\n” वर्ण माउस कर्सर को अगली पंक्ति पर ले जाता है।
  10. उपयोग पाश के लिए m नामक मानचित्र के तत्वों पर पुनरावृति करने के लिए itr नामक एक पुनरावर्तक बनाना।
  11. कंसोल पर मैप m के मान प्रिंट करें। “\t” वर्ण प्रत्येक कुंजी और उसके संगत मान के बीच एक क्षैतिज स्थान बनाता है। इसके विपरीत, “\n” वर्ण प्रत्येक पुनरावृत्ति के बाद माउस कर्सर को अगली पंक्ति पर ले जाता है।
  12. फॉर लूप के मुख्य भाग का अंत.
  13. प्रोग्राम को सफलतापूर्वक पूरा होने पर एक मान लौटाना होगा।
  14. 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';
	}
}

आउटपुट:

C++ मैप फाइंड सर्च उदाहरण 3 आउटपुट

कोड का स्क्रीनशॉट यहां दिया गया है:

C++ मैप फाइंड सर्च उदाहरण 3 कोड

Code स्पष्टीकरण:

  1. त्रुटियों के बिना इसके फ़ंक्शन का उपयोग करने के लिए हमारे कोड में iostream हेडर फ़ाइल शामिल करें।
  2. बिना किसी त्रुटि के इसके फ़ंक्शन का उपयोग करने के लिए स्ट्रिंग हेडर फ़ाइल को हमारे कोड में शामिल करें।
  3. त्रुटियों के बिना इसके फ़ंक्शन का उपयोग करने के लिए हमारे कोड में मैप हेडर फ़ाइल शामिल करें।
  4. std नामस्थान को हमारे कोड में शामिल करें ताकि इसे कॉल किए बिना इसके क्लासों का उपयोग किया जा सके।
  5. main() फ़ंक्शन को कॉल करें। { main() फ़ंक्शन के बॉडी की शुरुआत को दर्शाता है।
  6. स्टूडेंट्स नामक एक मानचित्र बनाएं जिसकी कुंजियाँ पूर्णांक और मान स्ट्रिंग होंगी।
  7. मानचित्र में छात्र मान डालें। मानचित्र में 200 की कुंजी और ऐलिस का मान डाला जाएगा।
  8. मानचित्र में Students का मान डालें। मानचित्र में 201 की कुंजी और John का मान डाला जाएगा।
  9. 201 की कुंजी से जुड़े मान को देखें।
  10. कुंजी का मान मिला है या नहीं, इसकी जांच करने के लिए if कथन का उपयोग करें।
  11. कंसोल पर कुछ पाठ के साथ कुंजी का मान प्रिंट करें।
  12. if कथन के मुख्य भाग का अंत.
  13. 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;
}

आउटपुट:

C++ map erase delete उदाहरण 4 आउटपुट

कोड का स्क्रीनशॉट यहां दिया गया है:

C++ map erase delete उदाहरण 4 कोड

Code स्पष्टीकरण:

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

अक्सर पूछे जाने वाले प्रश्न

std::map कुंजियों को स्व-संतुलित बाइनरी सर्च ट्री का उपयोग करके क्रमबद्ध रखता है, जिससे O(log n) ऑपरेशन होते हैं। std::unordered_map एक हैश टेबल का उपयोग करता है जिससे औसतन O(1) लुकअप होते हैं, लेकिन कुंजियों को किसी विशेष क्रम में संग्रहीत नहीं करता है। अपनी क्रमबद्धता आवश्यकताओं के आधार पर चुनें।

std::map को आमतौर पर एक स्व-संतुलित बाइनरी सर्च ट्री के रूप में कार्यान्वित किया जाता है, जो अक्सर एक रेड-ब्लैक ट्री होता है। यह कुंजियों को क्रमबद्ध रखता है और सम्मिलन, विलोपन और खोज कार्यों के लिए लघुगणकीय समय की गारंटी देता है।

नहीं। std::map में केवल अद्वितीय कुंजियाँ होती हैं, इसलिए किसी मौजूदा कुंजी को डालने से वह ओवरराइट नहीं होती। जब डुप्लिकेट कुंजियों की आवश्यकता हो, तो std::multimap का उपयोग करें, जो कई तत्वों को एक ही कुंजी मान साझा करने की अनुमति देता है।

किसी मान को पढ़ने या असाइन करने के लिए map_name[key] का उपयोग करें; कुंजी अनुपस्थित होने पर सबस्क्रिप्ट ऑपरेटर एक डिफ़ॉल्ट प्रविष्टि सम्मिलित करता है। at() सदस्य अनुपस्थित कुंजियों के लिए एक अपवाद उत्पन्न करता है, जिससे यह एक सुरक्षित विकल्प बन जाता है।

std::map जैसे कस्टम तुलनित्र को तीसरे टेम्पलेट तर्क के रूप में पास करें। ग्रेटर कंपैरेटर डिफ़ॉल्ट आरोही क्रम के बजाय कुंजियों को उच्चतम से निम्नतम क्रम में व्यवस्थित करता है।

std::map कुंजी-मान युग्मों को संग्रहीत करता है और कुंजी के आधार पर मानों को खोजता है, जबकि std::set केवल अद्वितीय कुंजियों को संग्रहीत करता है और उनसे संबंधित कोई मान नहीं होता है। दोनों में तत्व क्रमबद्ध रहते हैं, लेकिन map प्रत्येक कुंजी के साथ डेटा को संबद्ध करता है।

जी हां। एआई कोडिंग सहायक एक छोटे से संकेत या टिप्पणी को std::map कोड में परिवर्तित कर देते हैं, जिसमें घोषणाएं, इंसर्ट कॉल और इटरेटर लूप शामिल होते हैं। संकलन करने से पहले हमेशा उत्पन्न कुंजी प्रकारों, क्रम और विशिष्ट स्थितियों की समीक्षा करें।

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

इस पोस्ट को संक्षेप में इस प्रकार लिखें: