从另一个常量标准::映射初始化一个常量标准::映射的一部分

initialize part of a const std::map from another const std::map

本文关键字:映射 标准 常量 一个 一部分 初始化 另一个      更新时间:2023-10-16

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

const std::map< int, std::string > firstMap = {
{ 1, "First" },
{ 2, "Second"}
};

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

const std::map< int, std::string > secondMap = {
{ <firstMap>},
{ 3, "Third"}
};

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

编辑:地图也被声明为extern。

不,std::map没有合适的构造函数。但是,您可以做的是使用 lambda 就地初始化变量。

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

虽然@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;
}

,然后使用

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