Стирание unordered_set не работает в C++
Рассмотрим следующую ситуацию
void first(){
unordered_set<int> validPorts;
int roundNum=0, preFunctionSize, postFunctionSize,j=0 ;
while(j <100){
if(some_condition_A){
validPorts.insert(some_int_value);
}
j++;
}
do{
preFunctionSize = validPorts.size();
second( validPorts, some_int_value );
postFunctionSize = validPorts.size();
}while(roundNum<12);
}
void second( unordered_set<int> & validPorts, int some_int_value ){
for (auto it = validPorts.begin(); it != validPorts.end();) {
if (it == validPorts.find(some_int_value)) {
validPorts.erase(it++); // <== CODE enters here, I checked
} else {
++it;
}
}
}
Поэтому я ожидаю, что postFunctionSize должен быть меньше, чем preFunctionSize, так как я знаю, что он работал до функции стирания. Но похоже, что функция стирания не работает, так как я получаю одинаковое значение для двух из них. Я не совсем уверен, что здесь происходит и что это вызывает. Не могли бы вы, ребята, помочь мне с тем, что может быть не так с этим?
1 ответ
Ваш код, конечно, местами, но вы должны сделать:
it = validPorts.erase( it );
в цикле, где вы перебираете коллекцию, стирая некоторые из них.
Однако это не совсем то, что вы хотите сделать. Вы пытаетесь стереть значение из вашего unordered_set
так что просто делай
validPorts.erase( some_int_value );
и без петли.