инициализировать часть const std :: map из другого const std :: map - PullRequest
0 голосов
/ 08 мая 2018

У меня есть const std :: map , инициализированный так:

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.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Хотя @ 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"}});
0 голосов
/ 08 мая 2018

Нет, std::map не имеет подходящего конструктора для этого. Однако вы можете использовать лямбду для инициализации переменной на месте.

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