在地图中使用擦除元素

时间:2017-04-07 18:16:08

标签: c++ dictionary stl

我想知道我是否仍然可以在以下函数内的地图中访问/修改已删除元素的数据:

struct CustStruct {
  int a;
  int b;
};

void useAfterErase() {
  map<int, CustStruct> myMap;
  myMap[0] = {0,1};
  myMap[3] = {2,3};
  myMap[4] = {4,5};

  auto itr = myMap.find(3);
  auto & element = itr->second;

  myMap.erase(itr);

  // access after erased
  element.a = 100;
  element.b = 100;

  cout << element.a << " " << element.b << endl;
}

假设它是单线程,并且在修改映射之前删除之后的访问/修改是正确的,那么访问/修改是否总是安全的?

1 个答案:

答案 0 :(得分:0)

它永远不会安全。当它从地图上移除时,该物体几乎肯定会被摧毁。 (如果没有,什么时候会?)