दिलचस्प पोस्ट
एक छवि दृश्य के एक प्रदर्शन के आकार को प्राप्त करने की कोशिश कर रहा है सर्विस स्टैक अनुरोध डीटीओ डिजाइन अवैध स्ट्रिंग ऑफसेट चेतावनी PHP मैं Stemming या Lemmatization शब्द कैसे करूं? खराब जादू संख्या त्रुटि क्या है? नाम से स्विंग घटक प्राप्त करें NavigateUpFromSameTask का उपयोग करते हुए एक गतिविधि से लौट रहा है () डेटा फ्रेम में सीमांकक पर विभाजित स्तंभ उन मानों का चयन करें जो अलग-अलग पंक्तियों पर विभिन्न स्थितियों को पूरा करते हैं? JSON को पार्स करने के लिए विंडोज़ फार्म में सी # ऊर्ध्वाधर लेबल क्या मैं कभी वर्दी बफर या शेडर स्टोरेज बफर ऑब्जेक्ट के अंदर `vec3` का उपयोग करूँ? मैं किसी तरह के वाइल्डकार्ड का उपयोग कर कॉलम में कैसे खोज सकता हूँ (केस-असंवेदनशील)? कैसे स्ट्रिंग इनपुट एक संख्या है की जांच करने के लिए? अनक्यूट रेफरेंसएअर: फ़ंक्शन को ऑनक्लिक के साथ परिभाषित नहीं किया गया है

नक्शे के सी + + नक्शे के माध्यम से कैसे लूप करें?

मैं सी + + में एक std::map माध्यम से कैसे लूप करूँगा? मेरे नक्शे को परिभाषित किया गया है:

 std::map< std::string, std::map<std::string, std::string> > 

उदाहरण के लिए, इस तरह डेटा रखता है:

 m["name1"]["value1"] = "data1"; m["name1"]["value2"] = "data2"; m["name2"]["value1"] = "data1"; m["name2"]["value2"] = "data2"; m["name3"]["value1"] = "data1"; m["name3"]["value2"] = "data2"; 

मैं इस नक्शे के माध्यम से कैसे लूप कर सकता हूं और विभिन्न मानों का उपयोग कर सकता हूं?

वेब के समाधान से एकत्रित समाधान "नक्शे के सी + + नक्शे के माध्यम से कैसे लूप करें?"

पुराने प्रश्न, लेकिन शेष उत्तर C ++ 11 के रूप में पुरानी हैं – आप किसी लूप के आधार पर उपयोग कर सकते हैं और बस ऐसा करें:

 std::map<std::string, std::map<std::string, std::string>> mymap; for(auto const &ent1 : mymap) { // ent1.first is the first key for(auto const &ent2 : ent1.second) { // ent2.first is the second key // ent2.second is the data } } 

यह पहले के संस्करणों की तुलना में अधिक क्लीनर होना चाहिए, और अनावश्यक प्रतियों से बचा जाता है

रेफरेंस वेरिएबल्स की स्पष्ट परिभाषा के साथ टिप्पणियों की जगह कुछ पक्ष (जो अप्रयुक्त होने पर दूर हो जाता है):

 for(auto const &ent1 : mymap) { auto const &outer_key = ent1.first; auto const &inner_map = ent1.second; for(auto const &ent2 : inner_map) { auto const &inner_key = ent2.first; auto const &inner_value = ent2.second; } } 

आप एक इटरेटर का उपयोग कर सकते हैं

 typedef std::map<std::string, std::map<std::string, std::string>>::iterator it_type; for(it_type iterator = m.begin(); iterator != m.end(); iterator++) { // iterator->first = key // iterator->second = value // Repeat if you also want to iterate through the second map. } 
 for(std::map<std::string, std::map<std::string, std::string> >::iterator outer_iter=map.begin(); outer_iter!=map.end(); ++outer_iter) { for(std::map<std::string, std::string>::iterator inner_iter=outer_iter->second.begin(); inner_iter!=outer_iter->second.end(); ++inner_iter) { std::cout << inner_iter->second << std::endl; } } 

या सी ++ 0x में अच्छा है:

 for(auto outer_iter=map.begin(); outer_iter!=map.end(); ++outer_iter) { for(auto inner_iter=outer_iter->second.begin(); inner_iter!=outer_iter->second.end(); ++inner_iter) { std::cout << inner_iter->second << std::endl; } } 

ऐसा कुछ करो:

 typedef std::map<std::string, std::string> InnerMap; typedef std::map<std::string, InnerMap> OuterMap; Outermap mm; ...//set the initial values for (OuterMap::iterator i = mm.begin(); i != mm.end(); ++i) { InnerMap &im = i->second; for (InnerMap::iterator ii = im.begin(); ii != im.end(); ++ii) { std::cout << "map[" << i->first << "][" << ii->first << "] =" << ii->second << '\n'; } } 

सी ++ 17 में, आप "संरचित बाइंडिंग" सुविधा का उपयोग करने में सक्षम होंगे, जिससे आप एक ट्यूपल / जोड़ी का उपयोग करके विभिन्न नामों के साथ कई चर को परिभाषित कर सकते हैं। उदाहरण:

 for (const auto& [name, description] : planet_descriptions) { std::cout << "Planet " << name << ":\n" << description << "\n\n"; } 

मूल प्रस्ताव (विद्वानों बर्जने स्ट्रॉस्ट्रुप, हर्ब सटर और गेब्रियल डोस रीस द्वारा) पढ़ने के लिए मजेदार है (और सुझाया गया सिंटेक्स अधिक सहज ज्ञान युक्त आईएमएचओ है); वहां मानक के लिए प्रस्तावित शब्दसंगत भी है जो पढ़ने में उबाऊ है लेकिन वास्तव में वास्तव में क्या होगा

सी ++ 11:

 std::map< std::string, std::map<std::string, std::string> > m; m["name1"]["value1"] = "data1"; m["name1"]["value2"] = "data2"; m["name2"]["value1"] = "data1"; m["name2"]["value2"] = "data2"; m["name3"]["value1"] = "data1"; m["name3"]["value2"] = "data2"; for (auto i : m) for (auto j : i.second) cout << i.first.c_str() << ":" << j.first.c_str() << ":" << j.second.c_str() << endl; 

उत्पादन:

 name1:value1:data1 name1:value2:data2 name2:value1:data1 name2:value2:data2 name3:value1:data1 name3:value2:data2 

का उपयोग std::map< std::string, std::map<std::string, std::string> >::const_iterator जब नक्शा const है