std :: map <string,int>默认初始化值</string,int>

时间:2013-04-23 19:26:14

标签: c++ initialization std

这段代码看起来效果很好,默认值为value_typeint)为0;它适用于所有情况吗?

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

怎么样?   地图?默认为0.0?

3 个答案:

答案 0 :(得分:7)

是。在地图上使用[] - 运算符且不存在具有所需键的元素时,将插入一个已初始化值的新元素。对于整数,这意味着初始化为零。

答案 1 :(得分:6)

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

您显示的代码片段如下:

  • 对于t容器中string类型的每个键str
  • 搜索地图w以查找给定的密钥
  • 由于该条目不存在,因此会在地图中插入新的
  • 由于条目的键已知,但值不是,因此值的默认值(值初始化0的{​​{1}})对象获取创建
  • 对新创建的对象的引用(在这种情况下,int初始化为零)将返回给调用者
  • int&运算符应用于++返回的引用,该引用将[]更改为0(或1更改为0.0等等。)

答案 2 :(得分:1)

  

是否适用于所有情况?

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

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

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