我有这样的方法:
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
。
谢谢大家。
答案 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 :)。