Я прочитал вопрос о слиянии двух STL- карт, и, хотя он близок, я искал функциональность, подобную описанной здесь.
Короче говоря, я хотел бы объединить два экземпляра std::map
(имеющих один и тот же ключ и тип значения) в один, с оговоркой, которую я хотел бы добавить вместе, если объект существует на обеих картах.
Есть ли существующая функция boost, range-v3 или std, которая может это сделать? А если нет, то какой был бы лучший способ достичь этого?
Пример кода:
double mergePredicate(double lhs, double rhs)
{
return lhs + rhs;
}
int main()
{
std::map<int, double> mapA = { {0, 1.0}, {1, 2.0} };
std::map<int, double> mapB = { {1, 1.5}, {2, 2.5} };
// Merge maps in some way...
merge(mapA, mapB, mergePredicate);
// result: mapA == { {0, 1.0}, {1, 3.5}, {2, 2.5} }
for (const auto& p : mapA) {
std::cout << p.first << " " << p.second << std::endl;
}
}