假设我有
std::map<int, std::vector<double>> a;
这是合法的吗?
std::vector<double>& b = a[n];
其中n
是不存在的密钥。
我会说是的,在一些简化版本中有效但在实际程序中我得到了分段错误。
答案 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())插入到地图中