मैं मनोरंजन के लिए कोड करता हूं। मैंने यह देखने के लिए मानचित्रों का एक वेक्टर बनाया कि मैं कंटेनरों के साथ क्या कर सकता हूं। जब मैं वेक्टर के माध्यम से पुनरावृति करता हूं, केवल अल्फ्रेड और एंजेला दिखाई देते हैं। मैं सभी नाम कैसे प्रदर्शित करूं? क्या यह संभव भी है? यह है, जो कि अभी तक मेरे पास है:

#include <map>
#include <iostream>
#include <conio.h>
#include <vector>
#include <string>

int main()
{
    //create a map
    std::map<std::string, unsigned int> mySuperCoolMap;
    mySuperCoolMap["Edward"] = 39;
    mySuperCoolMap["Daniel"] = 35;
    mySuperCoolMap["Carlos"] = 67;
    mySuperCoolMap["Bobby"]  =  8;
    mySuperCoolMap["Alfred"] = 23;

    std::cout << "\n\n";

    //Ranged based for loop to display the names and age
    for (auto itr : mySuperCoolMap)
    {
        std::cout << itr.first << " is: " << itr.second << " years old.\n";
    }

    //create another map
    std::map<std::string, unsigned int> myOtherSuperCoolMap;
    myOtherSuperCoolMap["Espana"]  =  395;
    myOtherSuperCoolMap["Dominic"] = 1000;
    myOtherSuperCoolMap["Chalas"]  =  167;
    myOtherSuperCoolMap["Brian"]   =  238;
    myOtherSuperCoolMap["Angela"]  = 2300;

    //Display the names and age
    for (auto itr : myOtherSuperCoolMap)
    {
        std::cout << itr.first << " is: " << itr.second << " years old.\n";
    }

    //create a vector of maps
    std::vector<std::map<std::string, unsigned int>> myVectorOfMaps;

    myVectorOfMaps.push_back(mySuperCoolMap);
    myVectorOfMaps.push_back(myOtherSuperCoolMap);

    std::cout << "\n\n";

    //Display the values in the vector
    for (auto itr : myVectorOfMaps)
    {
        std::cout << itr.begin()->first << " is: " << itr.begin()->second << " years old.\n";
    }

    _getch();
    return 0;
}
1
Hawkbirdtree 17 अक्टूबर 2019, 07:21
शायद एक नेस्टेड लूप? तो पहले वेक्टर पर लूप करें और फिर उस लूप के अंदर मैप्स पर।
 – 
Paul Rooney
17 अक्टूबर 2019, 07:27
(साइड-नोट:) conio.h से पूरी तरह बचने के लिए सबसे अच्छा है और यदि आपको विंडोज़ के नीचे टर्मिनल को खुला रखने की आवश्यकता है, तो बस getchar() का उपयोग करें जो मानक सी लाइब्रेरी का हिस्सा है।
 – 
David C. Rankin
17 अक्टूबर 2019, 07:46
नामकरण: for (auto itr : mySuperCoolMap): itr एक पुनरावर्तक नहीं है, लेकिन एक मान (आपके मामले में एक जोड़ी), p itr से इतना बेहतर नाम है। (C++17 में, आप for (const auto& [name, age] : mySuperCoolMap) भी कर सकते हैं)।
 – 
Jarod42
17 अक्टूबर 2019, 11:36

2 जवाब

सबसे बढ़िया उत्तर

आपको नेस्टेड लूप का उपयोग करने की आवश्यकता है। यदि आप नई अवधारणाएँ सीख रहे हैं तो डिबगर का उपयोग करना और itr को प्रिंट करना संभवतः आपको यह अंतर्ज्ञान दे सकता है।

//Display the values in the vector
for (const auto &vec : myVectorOfMaps)
{
    for (const auto &p : vec)
    {
        std::cout << p.first << " is: " << p.second << " years old.\n";
    }
}

डेमो

आप केवल पहले तत्व को प्रिंट करने के लिए कह रहे हैं, इसलिए आपको केवल पहला तत्व मिलता है। ध्यान दें कि यह एक बग है क्योंकि आप यह सुनिश्चित किए बिना मानचित्र के पहले तत्व तक पहुंच रहे हैं कि नक्शा खाली है या नहीं।


ध्यान दें कि <conio.h> एक मानक हेडर नहीं है और मानक प्लेटफॉर्म के लिए उपलब्ध नहीं भी हो सकता है

5
Jarod42 17 अक्टूबर 2019, 11:38
2
इसमें शामिल सभी वस्तुओं की प्रतिलिपि बनाने से बचने के लिए आपके लूप को संदर्भों का उपयोग करके पुनरावृति करना चाहिए: for (auto &vecitr : myVectorOfMaps) { for (auto &mapitr : vecitr) { ... }
 – 
Remy Lebeau
17 अक्टूबर 2019, 07:40
बहुत - बहुत धन्यवाद। मुझे यह आपके सुझाव @GyaptiJain के साथ काम करने के लिए मिला।
 – 
Hawkbirdtree
17 अक्टूबर 2019, 08:09
धन्यवाद @RemyLebeau। मैं हमेशा उन संदर्भों को भूल जाता हूं।
 – 
Hawkbirdtree
17 अक्टूबर 2019, 08:11

लूप के लिए आप जो वस्तु प्राप्त करते हैं वह एक std::map है। तो आपको प्रत्येक मानचित्र में सभी प्रविष्टियों के माध्यम से जाने के लिए लूप के लिए दूसरे का उपयोग करने की आवश्यकता है।

3
Simon 17 अक्टूबर 2019, 07:32