एक std :: मानचित्र विस्तारित इनिशलाइज़र सूची कैसी दिखेगी?


90

यदि यह मौजूद है, तो एक std::mapविस्तारित इनिशलाइज़र सूची क्या दिखेगी?

मैंने कुछ संयोजनों की कोशिश की है ... ठीक है, सब कुछ मैं जीसीसी 4.4 के साथ सोच सकता था, लेकिन ऐसा कुछ भी नहीं मिला जो संकलित हो।

जवाबों:


145

यह मौजूद है और अच्छी तरह से काम करता है:

std::map <int, std::string>  x
  {
    std::make_pair (42, "foo"),
    std::make_pair (3, "bar")
  };

याद रखें कि मानचित्र का मूल्य प्रकार है pair <const key_type, mapped_type>, इसलिए आपको मूल रूप से समान या परिवर्तनीय प्रकारों के साथ जोड़े की सूची की आवश्यकता है।

एसटी :: जोड़ी के साथ एकीकृत इनिशियलाइज़ेशन के साथ, कोड और भी सरल हो जाता है

std::map <int, std::string> x { 
  { 42, "foo" }, 
  { 3, "bar" } 
};

3
बहुत बढ़िया, यह बहुत अच्छा स्टाइलवाइज बनाता है। मैं MSVC 2010 के लिए सिर्फ "ड्रॉप" समर्थन जीसीसी के साथ इसका उपयोग करने में सक्षम हो सकता हूं :)।
रुबनेव

1
सुनिश्चित करें कि आपके संकलक का समर्थन करता है आधुनिक सी ++ , क्योंकि map( std::initializer_list<value_type> init, const Compare& comp = Compare(), const Allocator& alloc = Allocator() );के बाद से उपलब्ध है सी ++ 11 , और map( std::initializer_list<value_type> init, const Allocator& );के बाद से ही उपलब्ध है सी ++ 14 । संदर्भ: std :: map
कैसरकटेज़

2

मुझे लगता है कि doublep के जवाब में जोड़ना चाहते हैं सूची आरंभीकरण भी नेस्टेड नक्शे के लिए काम करता है । उदाहरण के लिए, यदि आप एक है std::mapके साथ std::mapमूल्यों, तो आप यह निम्नलिखित तरीके से (बस सुनिश्चित करें कि आप घुंघराले ब्रेसिज़ में डूब नहीं है) में प्रारंभ कर सकते हैं:

int main() {
    std::map<int, std::map<std::string, double>> myMap{
        {1, {{"a", 1.0}, {"b", 2.0}}}, {3, {{"c", 3.0}, {"d", 4.0}, {"e", 5.0}}}
    };

    // C++17: Range-based for loops with structured binding.
    for (auto const &[k1, v1] : myMap) {
        std::cout << k1 << " =>";
        for (auto const &[k2, v2] : v1)            
            std::cout << " " << k2 << "->" << v2;
        std::cout << std::endl;
    }

    return 0;
}

आउटपुट:

1 => a-> 1 b-> 2
3 => c-> 3 d-> 4 e-> 5

कोलीरू पर कोड

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.