2

私は

std::vector<double> v;

エラー許容レベルまで、実際の値の存在を検出しようとしています。

 1e-6;

ドキュメントoperator==には、コンテナ内の値の存在を見つけるためにが使用されることが示されています。

ダブルスで必要な動作を生成するにはどうすればよいですか?

4

2 に答える 2

9

カスタム コンパレータを使用してプレーンを検索することはできません。代わりfindに使用する必要があります。find_ifC++11 の回答は既にありますが、C++03 で使用する回答は次のとおりです。

struct dbl_cmp {
    dbl_cmp(double v, double d) : val(v), delta(d) { }
    inline bool operator()(const double &x) const {
        return abs(x-val) < delta;
    }
private:
    double val, delta;
};
...
find_if(v.begin(), v.end(), dbl_cmp(10.5, 1E-8));
于 2013-03-14T10:43:24.257 に答える
7

このようにアプローチできます。

double a=3.14;  // The value you seek
std::find_if(v.begin(),v.end(),[a](double b) { return abs(a - b) < epsilon; });

浮動小数点の人々は、私がここで提供したものよりも優れた同等性比較アプローチを持っている可能性があります。

于 2013-03-14T10:39:47.057 に答える