如何在C ++ 11中编写地图文字?

时间:2013-11-26 23:22:37

标签: c++ c++11 map literals

在Python中,我可以像这样写一个地图文字:

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

如何在C ++ 11中执行等效操作?

2 个答案:

答案 0 :(得分:28)

你实际上可以这样做:

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

这里实际发生的是std::map存储std::pair个键值类型,在本例中为std::pair<const std::string,int>。这是唯一可能的,因为c ++ 11的新统一初始化语法在这种情况下调用std::pair<const std::string,int>的构造函数重载。在这种情况下,std::map有一个构造函数,其std::intializer_list负责外部括号。

因此,与python不同,只要创建一个采用初始化列表的构造函数(或统一初始化语法适用),您创建的任何类都可以使用此语法进行初始化。

答案 1 :(得分:14)

你可以这样做:

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