这段代码看起来很好,默认值为value_type
(int
)为0;它适用于所有情况吗?std :: map <string,int>默认初始化值
std::map<std::string,int> w;
for (const auto& t: str)
w[t]++;
什么双? 地图?默认0.0?
这段代码看起来很好,默认值为value_type
(int
)为0;它适用于所有情况吗?std :: map <string,int>默认初始化值
std::map<std::string,int> w;
for (const auto& t: str)
w[t]++;
什么双? 地图?默认0.0?
是的,这段代码适用于任何类型的密钥,包括double
。原因是非const operator []
返回一个参考到键的值,而不是该值的副本。这就是++
运算符应用的引用。
的代码片段显示您的工作方式如下:
str
容器string
类型的每个关键t
,w
中搜索给定键int&
初始化为零)被返回给调用者++
运算符应用于从[]
返回的参考,这改变0
到1
(或0.0
到1.0
等)是的。当您在地图上使用[]
-operator并且不存在具有所需键的元素时,会插入一个新元素,该元素将进行值初始化。对于整数,这意味着初始化为零。
它适用于所有情况吗?
对于所有情况,新密钥将与初始化为T()
的值相关联。
当T
是内置或Plain Old Data类型,如int
或double
,评估为零。
当T
是一个类时,地图将尝试调用空的构造函数。
如果这个类有一个默认的构造函数。否则它将无法编译。 – andrjas 2013-04-23 19:35:52
我不明白你在问什么。你能改说吗? – 2013-04-23 19:27:14
对不起,感到困惑。下面的答案是非常有帮助的。 – wenfeng 2013-04-23 20:40:14