在Python中,我可以这样做:
>>> foo = {1: 10, 2: 20}
>>> foo.update({1: 150, 5: 500})
>>> foo
{1: 150, 2: 20, 5: 500}
如何使用std::map
或std::unordered_map
在C ++中复制相同内容?
一些标准算法可能?
当然,人们可以滚动一个简单的循环 - 但这还不够简洁。
答案 0 :(得分:4)
有std::map::insert
和std::unordered_map::insert
重载需要std::initializer_list
并提供类似的功能。但这些只是为了更新现有的元素。
要复制dict.update
行为,您可以推出自己的帮助函数:
template <typename K, typename V>
void update_map(std::map<K,V>& m,
std::initializer_list<typename std::map<K,V>::value_type> l)
{
for (const auto& p : l)
m[p.first] = p.second;
}
std::map<int, int> m { {1, 10}, {2, 20} };
update_map(m, {{1, 150}, {5, 500}});
for (const auto& p : m)
{
std::cout << "{" << p.first << ", " << p.second << "}\n";
}
输出:
{1, 150}
{2, 20}
{5, 500}
答案 1 :(得分:1)
您可以使用[]
运算符std::map
[]
运算符将插入不存在的元素并替换现有元素。
std::map<int, int> foo {{1,10}, {2,20}};
foo[1] = 150;
foo[5] = 500;
生成的foo包含{1,150}, {2,20}, {5,500}
这会满足您的需求吗?