2013-04-23 858 views
5

这段代码看起来很好,默认值为value_typeint)为0;它适用于所有情况吗?std :: map <string,int>默认初始化值

std::map<std::string,int> w; 
for (const auto& t: str) 
    w[t]++; 

什么双? 地图?默认0.0?

+1

我不明白你在问什么。你能改说吗? – 2013-04-23 19:27:14

+0

对不起,感到困惑。下面的答案是非常有帮助的。 – wenfeng 2013-04-23 20:40:14

回答

5

是的,这段代码适用于任何类型的密钥,包括double。原因是非const operator []返回一个参考到键的值,而不是该值的副本。这就是++运算符应用的引用。

的代码片段显示您的工作方式如下:

  • 对于在str容器string类型的每个关键t
  • 地图w中搜索给定键
  • 由于进入不在那里,新的插入到地图中
  • 由于条目的键已知,但值不是,创建该值的默认对象
  • 的引用到新创建的对象(在这种情况下,int&初始化为零)被返回给调用者
  • ++运算符应用于从[]返回的参考,这改变01(或0.01.0等)
+0

感谢您的解释!很有帮助! – wenfeng 2013-04-23 20:37:18

+0

我明白了。谢谢。这实际上是我在stackoverflow上的第一个问题。 – wenfeng 2013-04-23 21:50:48

6

是的。当您在地图上使用[] -operator并且不存在具有所需键的元素时,会插入一个新元素,该元素将进行值初始化。对于整数,这意味着初始化为零。

1

它适用于所有情况吗?

对于所有情况,新密钥将与初始化为T()的值相关联。

T是内置或Plain Old Data类型,如intdouble,评估为零。

T是一个类时,地图将尝试调用空的构造函数。

+0

如果这个类有一个默认的构造函数。否则它将无法编译。 – andrjas 2013-04-23 19:35:52