我有一个 vector ,
std::vector<float> v;
和一个浮点值,x。 vector v 包含 x+epsilon,其中 epsilon 非常小(但大于机器 epsilon),但它不包含 <强>x强>。有没有办法使用 STL 在 vector 中找到 x+epsilon 的索引?
类似于:
int i = alternative_find(v.begin(), v.end(), x, gamma) - v.begin();
这将返回 v 中所有位于 [x-gamma,x+gamma] 中的值的索引?我可以实现二分搜索功能(我想避免线性时间复杂度),但我真的很想知道是否可以用更简单的方式完成。
最佳答案
找到 std::lower_bound
,然后是 std::upper_bound
,您就会得到您的范围。
从迭代器中,您可以使用 std::distance
获取索引(但如果可以,请坚持使用迭代器!)。
这假设您的数据已排序,但由于您谈论的是二进制搜索,这似乎是一个明智的假设。
如果不是,那么无论如何您都必须检查每个元素,在这种情况下,任何方法基本上都一样好。
关于c++ - 在 std::vector 中搜索一个值的近似值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20924682/