Python dict.update()与C ++ std :: map?

时间:2014-04-18 18:49:02

标签: python c++ c++11

在Python中,我可以这样做:

>>> foo = {1: 10, 2: 20}
>>> foo.update({1: 150, 5: 500})
>>> foo
{1: 150, 2: 20, 5: 500}

如何使用std::mapstd::unordered_map在C ++中复制相同内容? 一些标准算法可能?

当然,人们可以滚动一个简单的循环 - 但这还不够简洁。

2 个答案:

答案 0 :(得分:4)

std::map::insertstd::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}

这会满足您的需求吗?