Wednesday 15 January 2014

c++ - Copy subset of multimap into a new multimap -


  // इसमें कहीं और से डाटा है, सिर्फ इसकी एक ही प्रकार की multimap & lt; string, string & gt; map_with_data; स्ट्रिंग string_key = "some_string"; // काम नहीं कर रहा है: multimap & lt; स्ट्रिंग, स्ट्रिंग & gt; new_map; New_map = map_with_data [string_key];  

मुझे कुंजी string_key के साथ केवल महत्वपूर्ण जोड़े के साथ एक बहुमूल्य की वापसी चाहिए ऐसा करने का सही तरीका क्या है या यह भी संभव है कि सीधे नकल करने की यह विधि?

मुझे मिल रहा है: त्रुटि: 'ऑपरेटर के लिए कोई मेल नहीं है []' (ऑपरेटिंग प्रकार 'std: : Multimap & lt; std :: basic_string & lt; char & gt ;, std :: मूल_स्ट्रिंग & lt; char & gt; & gt; 'और' std :: स्ट्रिंग {aka std :: basic_string & lt; char & gt;} ')

निम्नलिखित की तरह मेरी पहली पसंद होगी:

  auto r = map_with_data.equal_range ( string_key); Multimap & lt; स्ट्रिंग, स्ट्रिंग & gt; नया_मैप (आर.एफ.प्रस्ट, आर.सेकंड);  

यह विशिष्ट कुंजी के साथ मौजूदा मैट में सभी आइटम पाता है, फिर उन इटेटर के नए मैप को आरंभ करता है। अगर उस कुंजी के साथ मौजूदा मानचित्र में कोई वस्तु नहीं है, तो आपको आर.एफ.एस. और दोनों के लिए map_with_data.end () मिलेगा, इसलिए आपका new_map होगा अंत में खाली (जैसा कि आप शायद उम्मीद करेंगे)।

यदि आप वास्तव में चाहते थे, तो आप lower_bound और upper_bound के बजाय equal_range :

  multimap & lt; स्ट्रिंग, स्ट्रिंग & gt; New_map {map_with_data.lower_bound (string_key), map_with_data.upper_bound (string_key)};  

हालांकि मैं equal_range का उपयोग करके कोड को पसंद करता हूं।

डेमो कोड:

  #include & lt; नक्शा & gt; #include & lt; स्ट्रिंग & gt; # शामिल करें & lt; iostream & gt; # शामिल & lt; इटरेटर & gt; नेमस्पेस एसटीडी का उपयोग करना; नाम स्थान एसटीडी {ओस्ट्रीम एंड ऑपरेटर & lt; & lt; (ओस्ट्रीम एंड ओएस, जोड़ी & lt; स्ट्रिंग, स्ट्रिंग & gt; कॉन्स्ट एंड पी) {रिटर्न ओएस & lt; & lt; "(" & Lt; & lt; p.first & lt; & lt; "," & lt; & lt; p.second & lt; & lt; ")"; }} Int main () {multimap & lt; स्ट्रिंग, स्ट्रिंग & gt; {"ए", "बी"}, {"ए", "सी"}, {"बी", "बी"}, {"बी", "सी"}}; ऑटो आर = map_with_data.equal_range ("ए"); Multimap & lt; स्ट्रिंग, स्ट्रिंग & gt; नया_मैप (आर.एफ.प्रस्ट, आर.सेकंड); प्रतिलिपि (new_map.begin (), new_map.end (), ostream_iterator & lt; जोड़ी & lt; स्ट्रिंग, स्ट्रिंग & gt; & gt; (std :: cout, "\ n")); }  

परिणाम:

  (ए, बी) (ए, सी)  

No comments:

Post a Comment