对于每个函数,我得到/拥有一个需要选择的有限大小的浮点数组。
所以如果我有类似的东西
1)
{-0.02, 0.5, 0.98, -0.15, etc... }
我会从这个列表中选择“-0.02”。
2)
{-0.78, 0.003, 0.1, -1.8, etc... }
现在,我会从这个列表中选择“0.003”。
这只是一个例子。在我的真实程序中,我有 5-6 个小数点的浮点数。
对于每个函数,我得到/拥有一个需要选择的有限大小的浮点数组。
所以如果我有类似的东西
1)
{-0.02, 0.5, 0.98, -0.15, etc... }
我会从这个列表中选择“-0.02”。
2)
{-0.78, 0.003, 0.1, -1.8, etc... }
现在,我会从这个列表中选择“0.003”。
这只是一个例子。在我的真实程序中,我有 5-6 个小数点的浮点数。
std::min_element
有一个采用比较函数对象的重载;这就是我在这里使用的:
float val = *std::min_element(std::begin(v), std::end(v),
[](float a, float b) { return fabs(a) < fabs(b); } );
无论如何,您必须遍历数组上的每个数字,因此最有效的答案将在 O(n) 中。
一旦你知道了这一点,你就会意识到,只要检查每个数字并检查你选择的最后一个数字是否接近于零,就可以达成交易。
使用带有比较功能的std::min_element应该归档您想要的内容。
template<class T>
const T& abs_min(const T& a, const T& b)
{
return (fabs(a) < fabs(b)) ;
}
const SIZE = 5;
float v[SIZE ] {-0.78, 0.003, 0.1, -1.8, 0.8};
float val = *std::min_element(v, v+SIZE , min_abs);
std::min_element
std::set<>
。然后使用并与it=std::set::lower_bound(0)
比较。这将更好地扩展大数据大小*it
*(it+1)