我有一个const std :: map< int,std :: string>像这样初始化:
const std::map< int, std::string > firstMap = {
{ 1, "First" },
{ 2, "Second"}
};
然后我想创建另一个const std :: map,它使用第一个映射作为其初始值的一部分,并且还扩展了原始数据。所以我想这会是类似的东西:
const std::map< int, std::string > secondMap = {
{ <firstMap>},
{ 3, "Third"}
};
这样第二个映射就有三对。这可能吗?
编辑:地图也被宣布为外部。
答案 0 :(得分:8)
不,std::map
没有正确的构造函数。但是,您可以使用lambda来初始化变量。
const auto secondMap = [&firstMap] {
std::map<int, std::string> map(firstMap);
map[3] = "Third";
return map;
}();
答案 1 :(得分:4)
虽然@Rakete111's answer完全有效,但我建议将其升级为函数。也许你可以在多个地方使用它。
std::map<int, std:::string> combine(std::map<int, std::string> const& map1,
std::map<int, std::string> const& map2)
{
std::map<int, std:::string> res(map1);
res.insert(map2.begin(), map2.end());
return res;
}
然后使用
const auto secondMap = combine(firstMap,
std::map<int, std::string>{{3, "Third"}});