c ++对非现有地图值的引用:分段错误

时间:2015-04-30 20:31:14

标签: c++ reference stdmap

假设我有

std::map<int, std::vector<double>> a;

这是合法的吗?

std::vector<double>& b = a[n];

其中n是不存在的密钥。 我会说是的,在一些简化版本中有效但在实际程序中我得到了分段错误。

2 个答案:

答案 0 :(得分:2)

是的,这是合法的。

在地图上使用operator[]功能时,如果项目不存在,则会插入该项目。

来自http://en.cppreference.com/w/cpp/container/map/operator_at

  

返回对映射到等效于key的键的值的引用,如果此类键尚不存在则执行插入。

答案 1 :(得分:1)

map::operator[]将执行密钥查找,并在找到时返回相关值。

如果未找到,则将使用默认初始化值插入密钥。

所以你写的应该是完全合法的。

见23.4.4.3:

  

地图元素访问 [map.access]
  T& operator[](const key_type& x);
  1)效果:如果地图中没有等效于x的键,则将value_type(x,T())插入到地图中