ホームページ > バックエンド開発 > C++ > 特定の最初の要素に基づいてベクトル内のペアを削除するために消去-削除イディオムを正しく使用するにはどうすればよいですか?

特定の最初の要素に基づいてベクトル内のペアを削除するために消去-削除イディオムを正しく使用するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-13 03:29:02
オリジナル
906 人が閲覧しました

How to Correctly Use the Erase-Remove Idiom for Removing Pairs in a Vector Based on a Specific First Element?

ペア コンテナでの消去-削除イディオムの使用

ペアのベクトルがあると仮定します > ここで、最初の要素は値を表し、2 番目の要素は列挙型の方向を表します。最初の要素に基づいて特定のペアを削除するには、erase-remove イディオムが適切なアプローチです。

ただし、質問で示されているように、最初の値が 4 のペアを削除すると、予期しない動作が発生します。これを修正するには、std::erase 関数に正しい範囲を指定する必要があります。

改良されたコードは次のようになります:

stopPoints.erase(std::remove_if(stopPoints.begin(),
                                stopPoints.end(),
                                [](const stopPointPair stopPoint) -> bool 
                                       { return stopPoint.first == 4; }), 
                 stopPoints.end());
ログイン後にコピー

これが正しく動作する理由は次のとおりです:

  • std::remove_if: この関数は (ベクトルの先頭から末尾まで) と、ペアの最初の要素が 4 に等しいかどうかをチェックする述語ラムダ。一致するすべてのペアが最後になるようにベクトル内の要素を再配置します。
  • 返されるイテレータ: std::remove_if の結果は、述語に一致する最初の要素 (つまり、最初の要素) を指すイテレータです。
  • std::erase: Erase 関数は、std::remove_if によって返された反復子からベクトルの末尾までの範囲を削除します。その結果、すべての一致するペアが削除されます。

std::erase 呼び出しで正しい範囲を指定することにより、指定された最初の値を持つすべてのペアが効果的に削除されます。

以上が特定の最初の要素に基づいてベクトル内のペアを削除するために消去-削除イディオムを正しく使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート