кусочное построение карты со списком инициализаторов

#c #c 17

#c #c 17

Вопрос:

попытка кусочного построения карты (в map of maps) со списком инициализаторов, получение синтаксической ошибки:

 std::unordered_map<int, std::unordered_map<int, int>> map;
map.emplace(std::piecewise_construct,
            std::forward_as_tuple(1),
            std::forward_as_tuple(std::initializer_list<std::pair<int, int>>{{1,1}}));
  

попробуйте здесь: https://onlinegdb.com/S1tzFQkDv

Комментарии:

1. Пожалуйста, добавьте полные ошибки компиляции к вашему вопросу. Людям легче понять, что происходит, полагаясь на внешние инструменты, которые помогут вам здесь 🙂

2. @JoelBodenmann в типичном режиме c это создает более 2 страниц сообщений об ошибках, публикация этой ошибки здесь не имеет большого значения, но серьезно снижает читаемость вопроса. я считаю, что внешний инструмент в этом случае является меньшим злом.

3. @hmad Джоэл прав, обычно в вопрос добавляется полная ошибка. Он будет отображаться в прокручиваемом окне, поэтому его длина не повредит.

Ответ №1:

Тип ключа в initializer_list должен быть const :

 std::unordered_map<int, std::unordered_map<int, int>> map;
map.emplace(std::piecewise_construct,
            std::forward_as_tuple(1),
            std::forward_as_tuple(std::initializer_list<std::pair<const int, int>>{{1,1}}));