C++ 如何用C++;11?

C++ 如何用C++;11?,c++,c++11,map,literals,C++,C++11,Map,Literals,在Python中,我可以编写如下映射文字: mymap = {"one" : 1, "two" : 2, "three" : 3} 如何在C++11中实现等效功能?您可以这样做: std::map<std::string, int> mymap = {{"one", 1}, {"two", 2}, {"three", 3}}; std::map mymap={{“一”,1},{“二”,2},{“三”,3}; 您实际上可以这样做: std::map<std::string,

在Python中,我可以编写如下映射文字:

mymap = {"one" : 1, "two" : 2, "three" : 3}
如何在C++11中实现等效功能?

您可以这样做:

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

您实际上可以这样做:

std::map<std::string, int> mymap = {{"one", 1}, {"two", 2}, {"three", 3}};
std::map mymap={{“一”,1},{“二”,2},{“三”,3};
这里实际发生的是
std::map
存储键值类型的
std::pair
,在本例中为
std::pair
。这只可能是因为c++11新的统一初始化语法,在本例中,它调用了
std::pair
的构造函数重载。在这种情况下,
std::map
有一个带有
std::initializer\u列表的构造函数,它负责外部大括号


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

为什么您要自言自语呢?我找不到关于此的答案,因此我添加了它以节省其他程序员的时间。所以实际上鼓励了这一点:@abw333可以说,这不是用于琐碎的“查找”参考风格的问题。。。想象一下“我如何在Jquery中添加两个数字”(有趣的是:)@sehe我只是想帮你。我花了几分钟在谷歌上搜索,但没有成功,最终不得不请人找出答案。我没有在SO上看到它,所以我发布了这个,以便更容易找到答案。你不应该在SO中分享你对x语言和y语言的个人观点。这种语法很好,因为与Python不同,
std::map
不是核心语言中的内置类型,它是静态类型而不是动态类型。这就像把苹果比作汽车。实际上
std::pair
。但是他们使用相同类型的初始值设定项。@aschepler good point修复了它,我猜这个键总是被赋予一个常量限定符,我认为这并不准确<代码>{“一”,1}
是统一初始化(如果std::pair实际上是POD,则可能甚至是聚合初始化)。只有外部的
{}
是初始值设定项列表。由于统一的初始化,它仍然有效(否则
mymap({{a,b},{c,d})
将是必需的)@sehe将其作为初始值设定项列表引用仍然有效,但我将编辑答案以使其生效clearer@aaronman事实并非如此。事实上,在存在初始值设定项列表的情况下,重载解析非常具体,因此可以很好地进行区分(采用初始值设定项列表的签名始终是统一初始化的首选;统一初始化并不意味着初始值设定项列表)