2015-12-16 14 views
5

Her iki harita da aynı anahtarı içeriyorsa, mapA öğelerinin önceliklerini tutarken iki std::unordered_map: mapA ve mapB'u birleştirmek istiyorum.İki unordered_maps ile örtüşen anahtarların birleştirilmesi

Bunu yapmanın zarif bir yolu var mı (daha sonra her bir anahtarı doğrulamak yerine .. benim haritalarım çok sayıda öğe içeriyor)?

Örnek: mapB

Teşekkür anahtar değer {"sugar",0.3} göz ardı

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

:

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

I istiyorum sonucudur.

+0

ilk düşüncem mapA' 'içine özel bir karşılaştırıcı ile' std :: set_difference' sonucunu eklemek olacaktır. – Tim

cevap

17

Kesinlikle: anahtar zaten kap içinde varsa unordered_map ait

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

insert üye fonksiyonları hiçbir şey.

Demo.

+0

Bir çekicilik gibi çalışır! Teşekkürler! – MZHm

0

std::unordered_map’ten bu yana, başka bir yol yoktur. mapB'da her bir öğenin üzerinde döngü yapıp mapA'a eklemeyi denemeniz gerekir. mapA'daki mevcut öğeler eklenmeyecek.

İlgili konular