从另一个const std :: map初始化const std :: map的一部分

dmo*_*256 4 c++ initialization stdmap c++11

我有一个const std :: map <int,std :: string>初始化如下:

const std::map< int, std::string > firstMap = {
    { 1, "First" },
    { 2, "Second"}
};
Run Code Online (Sandbox Code Playgroud)

然后我想制作另一个const std :: map,它使用第一个映射作为其初始值的一部分,并且还扩展了原始数据.所以我想这会是类似的东西:

const std::map< int, std::string > secondMap = {
    { <firstMap>},
    { 3, "Third"}
};
Run Code Online (Sandbox Code Playgroud)

这样第二个映射就有三对.这可能吗?

编辑:这些地图也被宣布为extern.

Rak*_*111 8

不,std::map没有正确的构造函数.但是,您可以使用lambda来初始化变量.

const auto secondMap = [&firstMap] {
    std::map<int, std::string> map(firstMap);
    map[3] = "Third";
    return map;
}();
Run Code Online (Sandbox Code Playgroud)


R S*_*ahu 5

虽然@Rakete111 的答案完全符合您的需求,但我建议将其提升为函数。也许您可以在多个地方使用它。

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;
}
Run Code Online (Sandbox Code Playgroud)

然后使用

const auto secondMap = combine(firstMap,
                               std::map<int, std::string>{{3, "Third"}});
Run Code Online (Sandbox Code Playgroud)