Ответ 1
Вы действительно можете это сделать:
std::map<std::string, int> mymap = {{"one", 1}, {"two", 2}, {"three", 3}};
Что на самом деле происходит здесь, так это то, что std::map
хранит std::pair
для типов значений ключа, в данном случае std::pair<const std::string,int>
. Это возможно только из-за синтаксиса синтаксиса С++ 11, который в этом случае вызывает перегрузку конструктора std::pair<const std::string,int>
. В этом случае std::map
имеет конструктор с std::intializer_list
, который отвечает за внешние фигурные скобки.
Таким образом, в отличие от python любой создаваемый вами класс может использовать этот синтаксис для инициализации, если вы создаете конструктор, который принимает список инициализаторов (или применим синтаксис синтаксиса)