Я пытаюсь стереть некоторые элементы с std :: map, все кажется, что работает правильно, до сегодняшнего дня, когда я обнаруживаю, что запускает бесконечный цикл.ошибка при попытке удалить элемент из std :: map в C++
double PMinThreshold = 0.05;
typedef std::map<int, double>::iterator predsIterator;
std::map<int, double> preds;
// Initialize preds under some conditions; otherwise, let the map empty
for (predsIterator it=preds.begin();it!=preds.end();it++){
it->second = it->second * mult;
if (it->second < PMinThreshold){
it2 = it;
it++;
preds.erase(it2);
}
}
ПРИМЕЧАНИЕ: i'am получает ошибку, когда Preds пусто, я не знаю, если карта была ранее пустой перед входом в цикле (который, кажется мне невозможным, чтобы вызвать бесконечный цикл) или стирание операция делает его пустым.
Спасибо,
'Я не знаю, была ли карта ранее пуста' ... Как насчет использования отладчика, чтобы узнать? – user2079303
Пожалуйста, отправьте код, который можно скомпилировать, и позволит читателю локально воспроизвести проблему. (т. е.: включить необходимые, основные и т. д.) – dingalapadum
Возможный дубликат [Что произойдет, если вы вызовеете erase() на элементе карты при повторении от начала до конца?] (http://stackoverflow.com/questions/263945/what-happens-if-you-call-erase-on-a-map-element-while-iterating-from-begin-to –