vector <double>在容差范围内找到double

Adi*_*hag 2 c++ stl vector find

我有一个

std::vector<double> v;
Run Code Online (Sandbox Code Playgroud)

我希望检测到它中存在真实值,直到达到容错级别

 1e-6;
Run Code Online (Sandbox Code Playgroud)

文档表明operator==用于查找容器中是否存在值.

如何在双打中生成我需要的行为?

das*_*ght 9

您无法使用plain find来搜索自定义比较器 - 您需要使用它find_if.你已经有了C++ 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));
Run Code Online (Sandbox Code Playgroud)


Eri*_*son 7

你可以像这样接近它.

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

浮点人员可能会有比我在这里提供的更好的等价比较方法.

  • 我认为它通常写成`abs(a - b)<epsilon`. (5认同)