/** * @file mix_cc/algorithm/nearest_index.h * @brief 找到容器内与元素值最相近的索引,无需容器有序 * @author Cat (null.null.null@qq.com) * @version 0.1 * @date 2021-07-06 * 找到容器内与元素值最相近的索引 * Company: Baosight Co. Ltd. * DO NOT COPY/USE WITHOUT PERMISSION * */ #pragma once #include #include #include #include #include namespace mix_cc { /** * @brief 找到容器内与元素值最相近的索引,无需容器有序 * @tparam Tp * @tparam Container * @param seq 序列容器 * @param values 元素 * @return std::vector */ template std::vector nearset_index(Container seq, std::initializer_list values) { std::vector mins(values.size(), std::numeric_limits::max()); std::vector index(values.size(), seq.size() - 1); int i = 0; int j = 0; for (auto x : seq) { auto diff = fabs(x - *(values.begin() + i)); if (diff <= mins[i]) { mins[i] = diff; j++; } else { if (i < values.size()) { index[i] = j; i++; } if (i == values.size()) { return index; } } } return index; } } // namespace mix_cc