std::map で double 型をキーとして使用すると、浮動小数点精度の問題が発生する可能性があります。イプシロンしきい値を使用した値の比較は一般的に使用されていますが、コンテナの順序付け要件に違反し、未定義の動作が発生する可能性があります。
これに対処するには、より安全なアプローチは、NaN 値を処理し、直接キーを回避するカスタム比較演算子を定義することです。比較。さらに、 std::multimap または std::multiset を使用すると、複数のキー値に対応できるため、予期しない動作のリスクが軽減されます。
二重キーを使用して近似検索を実行するには、ヘルパー関数を使用して範囲を返すことができます。ターゲット値に近い要素。イプシロン パラメータによって制御されます。この範囲を反復処理して、目的のキーが存在する場合はそれを見つけます。あるいは、範囲検索に基づいてキーの存在チェック関数を実装することもできます。
浮動小数点値を std::set または std::map のキーとして使用することは、一般に、浮動小数点値を使用することを避けることをお勧めします。エラー。より正確なインターフェイスからそれらを除外すると、予期しない値の比較によって引き起こされるバグのリスクを軽減できます。ただし、正確な順序が重要ではない、自動的にソートされたコレクションにこれらを使用すると、依然として有益な場合があります。
以上が浮動小数点値を「std::map」のキーとして安全に使用し、予期しない動作を回避するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。