6

这段代码似乎运行良好,它们value_type( int) 的默认值为 0;它适用于所有情况吗?

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

双倍呢?地图?默认0.0?

4

3 回答 3

8

Yes. When you use the []-operator on a map and no element with the desired key exists, a new element is inserted which is value-initialized. For an integer, this means initialized to zero.

于 2013-04-23T19:29:50.417 回答
8

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

您显示的代码片段的工作原理如下:

  • 对于容器中的每个t类型string的键,str
  • 在地图w上搜索给定的键
  • 由于该条目不存在,因此将一个新条目插入到地图中
  • 由于条目的键是已知的,但值不是,因此会创建该值的默认(值初始化,ei 0for int)对象
  • 对新创建对象的引用(在本例中,int&初始化为零)返回给调用者
  • ++运算符应用于从 中返回的引用,该引用更改[]01或更改0.01.0等)
于 2013-04-23T19:29:56.670 回答
2

它适用于所有情况吗?

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

WhenT是内置或普通旧数据类型,例如intor double,其计算结果为零。

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

于 2013-04-23T19:34:50.567 回答