请问STL地图自动初始化值? [重复](Does STL Map auto-initialize

2019-08-01 11:57发布

可能重复:
为什么在STL地图用作值类需要一个默认的构造函数中...?

当我使用的地图,就值肯定得到初始化为默认值,或者我不应该依赖呢?

例如,假设我有以下代码:

map<string, int> myMap;
cout << myMap["Hey"];

这将输出“0”与我的编译器。 这是保证行为? 难道这不会总是初始化为0?

Answer 1:

答曰标准:

ISO / IEC 14882§23.4.4.3

T& operator[](const key_type& x);

  1. 效果:如果没有键等同于x在地图,插入value_type(x, T())到地图。
  2. 要求: key_type应是CopyConstructiblemapped_typeDefaultConstructible
  3. 返回:到A参考mapped_type对应x*this
  4. 复杂性:对数。

因此,它不仅是有保证的,但评估myMap["Hey"]也导致了0值被插入到地图上,如果之前有没有它的条目。



Answer 2:

它值构建了一个新的密钥值。 看看一些文档 :

 A call to this function is equivalent to:
 insert(
    make_pair(x,T())
 );

这将转化

 insert(make_pair("Key", int()));

所以,是的:你的价值将为零在第一。



文章来源: Does STL Map auto-initialize values? [duplicate]
标签: c++ stl map