簡體   English   中英

在數組中找到最接近給定數字的數字的 position

[英]Find position of a number in array closest to given number

我正在尋找一種優雅的方法來找到數組中最接近給定值的元素。

這是一個有效的實現:

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

要找到最小化某些 function 的元素,您可以使用std::min_element 請注意,這不是最有效的,因為它評估 function 以在每次比較時最小化。 當要最小化的 function 成本更高時,您可能寧願填充函數結果的容器,然后在其中找到最小值。 雖然只要它只是對std::abs的調用就應該沒問題:

#include <vector>
#include <iostream>
#include <algorithm>

int main(){ 
    std::vector<double> vect = { 1,2,3,6,7,8 };
    double num = 4;
    auto it = std::min_element(vect.begin(),vect.end(),[num](double x,double y){ 
        return std::abs(num-x) < std::abs(num-y); 
    });
    std::cout << *it << std::endl;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM