Стирание 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 );

и без петли.

Другие вопросы по тегам