Предположим, что у меня есть две карты одного типа, а набор ключей второй карты - это подмножество ключей первой карты. Я хочу обновить первые значения карты со значениями со второй карты (только для ключей, которые содержит вторая карта).Обновить карту со значениями с другой карты
Я написал простой цикл, чтобы сделать это, но мне было интересно, есть ли лучший способ написать его с использованием алгоритмов STL. Образец
Код:
using PersonAgeMap = std::map<std::string, int>;
PersonAgeMap map1;
map1.insert(std::make_pair("John", 23));
map1.insert(std::make_pair("Liza", 19));
map1.insert(std::make_pair("Dad", 45));
map1.insert(std::make_pair("Granny", 77));
PersonAgeMap map2;
map2.insert(std::make_pair("John", 24));
map2.insert(std::make_pair("Liza", 20));
//simple cycle way
for (const auto& person: map2)
{
map1[person.first] = person.second;
}
//is there some another way of doing this using STL algorithms???
for (const auto& person: map1)
{
std::cout << person.first << " " << person.second << std::endl;
}
Выход:
Dad 45
Granny 77
John 24
Liza 20
_ «Я написал для него простой цикл, но есть ли лучший способ написать его с помощью алгоритмов STL?» _ Немного неясно, о чем вы просите. Вы должны знать, что 'map1 [person.first] = person.second;' вставляет значения безоговорочно, независимо от того, был ли указан параметр map1 [person.first] '. –
Поскольку я написал, что ключи от map2 являются подмножеством ключей от map1, другими словами, у меня есть предварительное условие, что map1 содержит все ключи от map2, и я хочу обновлять значения на карте со значениями из map2 для этих ключей. –
Вы проверили интерфейс 'map' для вставки диапазона? Вы проверили существующие алгоритмы на то, что можно было использовать? –