将std :: initializer_list插入std :: map

时间:2014-02-23 02:52:59

标签: c++ c++11 std stdmap

我有这样的方法:

std::map<std::string, int> container;

void myMap(std::initializer_list<std::pair<std::string, int>> input)
{
    // insert 'input' into map...
}

我可以这样称呼这个方法:

myMap({
    {"foo", 1}
});

如何转换我的自定义参数并插入地图?

我试过了:

container = input;

container(input);

但是不行,因为地图参数只有std::initializer_list而且那里没有std::pair

谢谢大家。

2 个答案:

答案 0 :(得分:8)

container.insert(input.begin(), input.end());

如果您想替换地图的内容。首先做container.clear();

答案 1 :(得分:6)

你的问题是 std :: map&lt; std :: string,int&gt; 的value_type不是 的std ::对&LT;的std :: string,INT&GT; 。它是 std :: pair&lt; const std :: string,int&gt; 。注意键上的 const 。这很好用:

std::map<std::string, int> container;

void myMap(std::initializer_list<std::pair<const std::string, int>> input) {
    container = input;
}

如果无法更改函数的签名,则必须编写循环或使用 std :: copy 将每个输入元素转换为容器的value_type。但我猜你可能会,因为它被称为 myMap 而不是 otherGuysMap :)。