这段代码看起来效果很好,默认值为value_type
(int
)为0;它适用于所有情况吗?
std::map<std::string,int> w;
for (const auto& t: str)
w[t]++;
怎么样? 地图?默认为0.0?
答案 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类型时,例如int
或double
,评估为零。
当T
是一个类时,地图将尝试调用空构造函数。