我有一些代碼看起來大致像這樣;給定兩張地圖,如果兩張地圖中都存在first
鍵,則將兩個值相乘,然後求和所有產品。例如:執行映射中匹配對的功能
s1 = {{1, 2.5}, {2, 10.0}, {3, 0.5}};
s2 = {{1, 10.0}, {3, 20.0}, {4, 3.33}};
答案應該是2.5*10.0 + 0.5*20.0
,即匹配鍵的乘積之和。
double calcProduct(std::map<int, double> const &s1, std::map<int, double> const &s2)
{
auto s1_it = s1.begin();
auto s2_it = s2.begin();
double result = 0;
while (s1_it != s1.end() && s2_it != s2.end())
{
if (s1_it->first == s2_it->first)
{
result += s1_it->second * s2_it->second;
s1_it++:
s2_it++;
}
else if (s1_it->first < s2_it->first)
{
s1_it = s1.lower_bound(s2_it->first);
}
else
{
s2_it = s2.lower_bound(s1_it->first);
}
}
return result;
}
我想重構這個和std::set_intersection
似乎是接近我想要的文檔有an example using std::back_inserter
,但有沒有辦法得到這個在地圖上的工作,避免了中間陣列?
檢查您設置的對象聲明。看來你的意思是std :: pair作爲模板參數。 –
另外一個關於你每次找到一對匹配的時候你期望做什麼的詞,每次你沒有。 – tinstaafl
@tinstaafl我已經添加了一些描述我正在嘗試做的事情的文本。 –