unordered_set擦除在C ++中不起作用

时间:2014-08-22 15:26:18

标签: c++ erase unordered-set

考虑以下情况

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 个答案:

答案 0 :(得分:0)

您的代码当然是伪的,但您需要这样做:

it = validPorts.erase( it );

在一个循环中,你在迭代一个集合中删除它们中的一些。

然而,这也不是你想要做的。您正试图从unordered_set中删除值,所以只需执行

validPorts.erase( some_int_value );

没有循环。