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

abw*_*333 14 c++ map literals c++11

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

mymap = {"one" : 1, "two" : 2, "three" : 3}
Run Code Online (Sandbox Code Playgroud)

如何在C++ 11中完成等效操作?

aar*_*man 30

你实际上可以这样做:

std::map<std::string, int> mymap = {{"one", 1}, {"two", 2}, {"three", 3}};
Run Code Online (Sandbox Code Playgroud)

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

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


abw*_*333 15

你可以这样做:

std::map<std::string, int> mymap = {{"one", 1}, {"two", 2}, {"three", 3}};
Run Code Online (Sandbox Code Playgroud)

  • 我在SO上找不到答案,所以我添加它以节省其他程序员的时间.所以实际上鼓励这样做:http://stackoverflow.com/help/self-answer (9认同)
  • 您不应该在SO中分享您对语言x与语言y的个人意见.这种语法很好,因为与Python不同,`std :: map`不是核心语言中的内置类型,而是静态类型而不是动态类型.这就像比较苹果和汽车. (5认同)
  • 你为什么和自己说话? (4认同)
  • @sehe我只是想帮忙.我花了几分钟谷歌搜索并没有成功,最终不得不请某人找出答案.我没有在SO上看到它,所以我发布了这个,以便更容易找到答案. (2认同)