セットを繰り返し処理して特定のアイテムを削除したい場合、イテレータが変更されます。これにより、削除後に反復が失敗するため、セグメンテーション違反が発生します。どうすればこの問題を克服できますか?
std::set< std::pair<double,unsigned>, comparisonFunction> candidates;'
[...]
for( auto it = candidates.begin(); it != candidates.end(); ++it)
{
[...]
if ( some constraint satisfied)
{
candidates.erase(it);
}
}
このコードを使用すると、segfault が発生します。私の推測では、これは破損したイテレータによるものか、場合によっては削除される要素が最後の要素であるという事実によるものです。イテレータのポストインクリメントはこの問題を解決しますか? このような:
candidate.erase(it++);