STL Map是否自动初始化值?

时间:2012-10-15 04:56:59

标签: c++ stl map

  

可能重复:
  Why does a class used as a value in a STL map need a default constructor in …?

当我使用地图时,值肯定会被初始化为默认值,还是我不应该依赖它?

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

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

这将与我的编译器输出“0”。这是保证的行为吗?是否有可能不会始终初始化为0?

2 个答案:

答案 0 :(得分:21)

标准:

  

ISO / IEC14882§23.4.4.3

     

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

     
      
  1. 效果:如果地图中没有等效于x的键,请将value_type(x, T())插入地图。
  2.   
  3. 要求: key_type应为CopyConstructiblemapped_typeDefaultConstructible
  4.   
  5. 返回:mapped_type中与x对应的*this的引用。
  6.   
  7. 复杂性:对数。
  8.   

因此,不仅可以保证,而且评估myMap["Hey"]也会导致值0 插入到地图中,如果以前没有条目的话。

答案 1 :(得分:7)

它值构造新键的值。看看some documentation

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

这将转化为

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

是的:你的价值一开始就是零。