ペア削除の Erase-Remove_if イディオム
erase-remove_if イディオムを使用してペアを削除しようとする場合std::vector
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [&](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }));
問題の根本は不完全な消去プロセスにあります。 std::erase_if は、一致する要素をベクトルの末尾に移動するだけです。それらは削除されません。削除を完了するには、std::remove_if によって返された反復子を消去の開始点として使用するのが正しいアプローチです:
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }), stopPoints.end());
Erase-Remove_if メカニズムの理解:
さらに詳しい情報については、[消去-削除イディオム](https://en.wikipedia.org/) に関するウィキペディアの記事を参照してください。 wiki/Erase-remove_idiom).
以上が`std::vector` から要素を削除するときに、erase-remove_if が重複したペアを残すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。