C
Ups, stimmt - map::key_comp() erwartet Schlüsselwerte (in deinem Fall double's), die es vergleichen soll.
Und ja: set_intersection ist effizienter als ein linearer Vergleich, ABER es erwartet, daß der Suchbereich entsprechend dem gesuchten Kriterium sortiert ist (und eine map<double,string> ist NICHT nach den string's sortiert). Du könntest höchstens einen Umweg über einen zweiten Container verwenden:
template<typename F,typename S>
bool cmp2nd(const pair<F,S>& lhs,const pair<F,S>& rhs)
{ return lhs.second<rhs.second; }
map<double,string> map1,map2;
multimap<double,string> target;
//umkopieren in Vectoren:
vector<pair<double,string> data1(map1.begin(),map1.end()),data2(map2.begin(),map2.end());
//diese Vectoren kannst du jetzt nach deinen eigenen Vorstellungen sortieren und mergen:
sort(data1.begin(),data1.end(),cmp2nd);
sort(data2.begin(),data2.end(),cmp2nd);
set_intersection(data1.begin(),data1.end(),data2.begin(),data2.end(),inserter(target,target.begin()),cmp2nd);
(oder du nutzt transform(), um aus jeder map die string-Hälften rauszuziehen)