Изменение значения в карте внутри итерации той же карты (вложенный итератор) C ++ - PullRequest
0 голосов
/ 11 июля 2019

Я столкнулся с какой-то странной проблемой в приведенном ниже коде, который скомпилирован в linux,

В приведенном ниже фрагменте кода выполняется итерация карты " ObjectsMap " из Begin и внутри цикла итерации,Я пытаюсь изменить значение другого ключа на той же карте " ObjectsMap ".

map<int, ObjectA>::iterator outerItr = reDt->ObjectsMap->begin();
for (; outerItr!= reDt->ObjectsMap->end(); outerItr++)
{
  int parentid = outerItr->second.parentID;
  map<int, ObjectA>::iterator innerItr = reDt->ObjectsMap->find(parentid);
  if (innerItr != reDt->ObjectsMap->end())
  {
     innerItr->second.selfTime = innerItr->second.selfTime + outerItr->second.execTime;
  }
}

Во время выполнения этого кода я получаю неверное / неожиданное значение в selfTime .Но если я добавлю журнал в блок if (), то, как ни странно, значение будет правильным.Если журнал удаляется, я снова получаю неправильное значение в selfTime .

Что это за странная вещь здесь?Это из-за поведения гонки данных?

Обновление 1:

selfTime полученное мной значение не является нежелательным.Но это неверное значение, значение выше ожидаемого - я имею в виду "externalItr-> second.execTime" некоторых более неправильных ключей, также добавляется в "innerItr-> second.selfTime"

...