将std :: initializer_list插入到std :: map中

3
我有一个像这样的方法:
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);

但是不起作用,因为map的参数只有std::initializer_list,而没有std::pair

谢谢大家。

2个回答

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

如果您想要替换地图的内容,请先执行container.clear();

6
您的问题在于std::map<std::string,int>的value_type不是std::pair<std::string,int>。它是std::pair<const std::string, int>。请注意键上的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 :)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接