На самом деле, когда вы назначаете map2
на map1
.Он копирует map2
в map1
, заменяя старое содержимое.
Поэтому после присвоения старые значения теряются, и map1
теперь является точной копией map2
.
Если вы хотите добавить только новые элементы, вы можете использовать функцию insert()
.Это может выглядеть следующим образом:
#include <map>
int main()
{
std::map<int, int> map1 {{1 ,1001}, {2, 1002}, {3, 1003}};
std::map<int, int> map2 {{10, 1010}, {11, 1011}, {12, 1012}};
map1.insert(map2.cbegin(), map2.cend());
for(const auto & e : map1)
{
std::cout << e.first << ": " << e.second << std::endl;
}
return 0;
}
Таким образом, map2
вставляется в map1
без удаления старого содержимого.Вам просто нужно знать, что если вы попытаетесь вставить уже существующий ключ, он не будет вставлен (поскольку все элементы уникальны в std::map
).
РЕДАКТИРОВАТЬ:
Если вы также хотите заменить уже существующие значения, вы можете просто использовать operator[]
.Это может выглядеть как:
for(const auto & e : map2)
{
// If the key exists, change only the value, add the {key, value} otherwise
map1[e.first] = e.second;
}