编写模式识别'函数以按特定顺序查找数字的出现? C ++

时间:2018-01-15 16:56:47

标签: c++

我有一个容器,它存储来自源的双值,我需要找到数字在特定顺序/模式中出现时的位置。

vector<double> m = {-0.15,0.2,-0.2,-0.1,0.5,-0.15,-0.8,0.35,-0.2,-0.35......nth}

有没有办法找到数字的位置,如果按顺序出现(按顺序),如:

m[x] = 0.1 to 0.5  //value of m[x] must between those two values
m[x+1] = 0.35 to 0.7 //anywhere between the range 
m[x+2] = -0.1 to 0.1 //         "     
m[x+3] = 0.0 to.03    //        "

1 个答案:

答案 0 :(得分:3)

带有自定义谓词的

std::search

您的模式将包含范围,如果LHS双精度位于RHS范围内,则需要自定义二元谓词返回true。

未经测试的例子:

using Range = std::pair<double,double>;
std::vector<Range> pattern {{0.1, 0.5}, {0.35, 0.7}, {-0.1, 0.1}, {0.0, 0.03}};
auto match = std::search(begin(m), end(m),
                         begin(pattern), end(pattern),
                         [](double d, Range r) {
                           return (r.first < d) && (d < r.second);
                         });

为您的双重比较等添加适当的epsilon等。