将std :: initializer_list插入std :: map

SH.*_*x90 3 c++ stdmap std c++11

我有这样的方法:

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

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

我可以像这样调用这个方法:

myMap({
    {"foo", 1}
});
Run Code Online (Sandbox Code Playgroud)

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

我试过了:

container = input;

container(input);
Run Code Online (Sandbox Code Playgroud)

但是不要工作,因为地图的参数只是,std::initializer_list并且那里没有std::pair.

谢谢你们.

Bri*_*ian 8

container.insert(input.begin(), input.end());
Run Code Online (Sandbox Code Playgroud)

如果要替换地图的内容.做container.clear();第一.


Bil*_*hue 6

您的问题是std :: map <std :: string,int>的value_type 不是 std :: pair <std :: string,int>.它是std :: pair <const std :: string,int>.注意键上的常量.这很好用:

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

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

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