Как написать литерал в С++ 11?

В Python я могу написать литерал карты следующим образом:

mymap = {"one" : 1, "two" : 2, "three" : 3}

Как я могу сделать эквивалент в С++ 11?

Ответ 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 любой создаваемый вами класс может использовать этот синтаксис для инициализации, если вы создаете конструктор, который принимает список инициализаторов (или применим синтаксис синтаксиса)

Ответ 2

Вы можете сделать это:

std::map<std::string, int> mymap = {{"one", 1}, {"two", 2}, {"three", 3}};