2015-12-16 18 views
5

मैं दो std::unordered_map: mapA और mapB मर्ज करना चाहता हूं, जबकि mapA से वस्तुओं के लिए प्राथमिकता रखते हुए दोनों मानचित्रों में एक ही कुंजी होती है।ओवरलैपिंग कुंजियों के साथ दो unordered_maps विलय

वहाँ (बल्कि उसके बाद प्रत्येक कुंजी .. मेरे नक्शे तत्वों की एक बड़ी संख्या में मान्य) ऐसा करने का एक सुंदर तरीका है?

उदाहरण:

mapA = {{"sugar",0.1},{"salt",0.2}} 
mapB = {{"sugar",0.3},{"pepper",0.4}} 

परिणाम मैं चाहते हैं:

result = {{"sugar",0.1},{"salt",0.2},{"pepper",0.4}} 

से mapB

धन्यवाद कुंजी-मान {"sugar",0.3} की उपेक्षा।

+0

मेरी पहली सोचा 'std ::' mapA' में एक कस्टम तुलनित्र के साथ set_difference' का परिणाम डालने के लिए किया जाएगा। – Tim

उत्तर

17

बिल्कुल:

auto result = mapA; 
result.insert(mapB.begin(), mapB.end()); 

insertunordered_map के सदस्य कार्यों में कुछ नहीं कर यदि कुंजी पहले से कंटेनर के भीतर मौजूद है।

Demo.

+0

एक आकर्षण की तरह काम करता है! धन्यवाद! – MZHm

0

के बाद से std::unordered_map अवर्गीकृत है, वहाँ कोई अन्य तरीका है। आपको mapB में प्रत्येक तत्व पर लूप करना होगा और इसे mapA में डालने का प्रयास करना होगा। mapA में मौजूदा तत्व डाले नहीं जाएंगे।

संबंधित मुद्दे