eis/mix_cc/algorithm/nearest_index.h

54 lines
1.3 KiB
C
Raw Permalink Normal View History

/**
* @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 <algorithm>
#include <cstddef>
#include <limits>
#include <queue>
#include <vector>
namespace mix_cc {
/**
* @brief ,
* @tparam Tp
* @tparam Container
* @param seq
* @param values
* @return std::vector<size_t>
*/
template <typename Tp, typename Container>
std::vector<size_t> nearset_index(Container seq,
std::initializer_list<Tp> values) {
std::vector<Tp> mins(values.size(), std::numeric_limits<Tp>::max());
std::vector<size_t> 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