Я пытался удалить элемент из std::multimap, когда я зацикливался на нем в потоке, который им манипулирует. Я использовал функцию стирания следующими способами.
Когда я делаю это
//mItr is base iterator which loops over the multimap
std::multimap<std::string, std::string>::iterator tmpItr = ++mItr;
healthyQ.erase(mItr);
mItr = tmpItr;
так что я мог проверить итератор после стирания элемента из мультикарты, программа останавливается в вызове erase(). Поэтому я использовал его следующим образом, чтобы получить следующий действительный итератор:
mItr = healthyQ.erase(mItr);
Это сработало. На это ушло много времени, и я до сих пор не уверен, в чем может быть проблема.
mItr = healthyQ.erase(mItr);
) является правильным способом выполнения операции (присваивание заменяет приращение ++, которое вы обычно делаете). - person utnapistim   schedule 18.05.2015tmpItr
равноmItr
еще до присваивания из-за предварительного приращения, т. е.tmpItr
также относится к элементу, который вы только что стерли. - person molbdnilo   schedule 18.05.2015