【发布时间】:2021-08-14 22:35:17
【问题描述】:
我正在寻找一种优雅的方法来查找数组中最接近给定值的元素。
这是一个有效的实现:
std::vector<double> array = { /* numbers */ };
double num = /* given number */;
double min_diff = std::abs(array[0] - num);
size_t best_pos = 0;
for (size_t i = 1; i < array.size(); i++) {
double curr_diff = std::abs(array[i] - num);
if (curr_diff < min_diff) {
min_diff = curr_diff;
best_pos = i;
}
}
std::cout << best_pos << std::endl;
有没有更好的解决方案(不是算法,而是更漂亮)?也许是<algorithm>?
best_pos类型没有限制,可以是std::iterator。
【问题讨论】:
-
std::upper_bound或std::lower_bound如果已排序将是一个好的开始 -
可能是基于范围的
for循环? -
@NathanOliver 不幸的是它没有排序
-
std::min带有自定义谓词。美是很主观的。为什么您认为您当前的解决方案不优雅? “产生正确的结果”很漂亮;) -
@πάνταῥεῖ 如何在基于范围的数组中获得位置?