remove_if std::map
と同等 C では、 std::remove_if アルゴリズムは、条件を満たすシーケンスから要素を効果的に削除できます。特定の条件。ただし、このアルゴリズムは std::map のような連想コンテナには直接適用できません。
マップを操作する場合は、変更されたアプローチが必要です。一致するすべての要素をやみくもに削除して反復子を無効にする代わりに、マップを反復処理して各要素を条件と照合してチェックする方が安全な方法です。
次のコード スニペットを考えてみましょう。
std::map<int, std::string> aMap; aMap[2] = "two"; aMap[3] = "three"; aMap[4] = "four"; aMap[5] = "five"; aMap[6] = "six"; std::map<int, std::string>::iterator iter = aMap.begin(); std::map<int, std::string>::iterator endIter = aMap.end(); for (; iter != endIter;) { if (Some Condition) { // Safe to erase, invalidates only the current iterator iter = aMap.erase(iter); } else { ++iter; } }
Inこのアプローチでは、要素が条件を満たさない場合にのみ反復子をインクリメントします。要素を消去すると、その要素を指すイテレータが無効になりますが、マップ内の他のイテレータには影響しません。したがって、要素を削除した後でも反復を安全に続行できます。
この変更されたアルゴリズムを採用することで、コンテナーの整合性を維持しながら、カスタム条件に基づいて std::map から要素を安全に削除できます。 .
以上がC の std::map の std::remove_if と同等の機能を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。