在有条件的向量中找到最接近的数字
Find nearest number in vector with conditions
假设我有一个这样的向量:
std::vector<int> inputs = {3,2,6,3,7,1,8};
int left = 1; // Number 3
int right = 4; // Numbers 2,6,3,7
int middle = 2; // Numbers 1,8
现在对于">中间"(1,8)中的每个数字,我想找出向量"左侧和右侧"中最接近的更大数。如果没有更大的数字,则返回最接近的较小数字。
// Iterating the last two numbers 1, and 8.
for(int i = left+right; i<left+right+middle; i++){
...
}
我尝试使用std::lower_bound
获取最近的GREATER 元素,但它总是返回一些数字。即使没有更大或相等的元素。因此,我无法继续...
输出应如下所示:
closest-left, closest-right --> index in vector
3,2 --> index 0,1
3,7 --> index 0,4
输出说明:
{3}左侧最接近 1 的数字是 3,左侧 {2,6,3,7},其 2。
左侧最接近 8 的数字{3}是 3,左侧 {2,6,3,7},是 7。
解决这个问题的另一种方法是什么?
您正在寻找带有自定义比较器的min_element
。
const std::vector<int> inputs = {3,2,6,3,7,1,8};
int left = 1; // Number 3
int right = 4; // Numbers 2,6,3,7
int middle = 2; // Numbers 1,8
for (int i = left + right; i < left + right + middle; ++i) {
auto as_tuple = [&, i](int e) { return std::make_tuple(e < inputs[i],
std::abs(e - inputs[i]));};
auto comparer = [&, i](int lhs, int rhs){ return as_tuple(lhs) < as_tuple(rhs); };
auto it1 = std::min_element(inputs.begin(), inputs.begin() + left, comparer);
auto it2 = std::min_element(inputs.begin() + left,
inputs.begin() + left + right,
comparer);
// Assuming non-empty ranges: else check left, right with 0
std::cout << *it1 << ", " << *it2
<< " --> index "
<< std::distance(inputs.begin(), it1) << ", "
<< std::distance(inputs.begin(), it2) << std::endl;
}
演示
相关文章:
- 查找最接近的大于当前数字的数字的索引
- 遍历并行数组以确定C++中的最大数字
- 如何找到大于整数的最小数字
- 必须首先打印向量 v1 中最接近整数 x 的数字<int>
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 为什么使用数组元素查找最大数字的程序不起作用?
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- 查找整数数组中最接近的数字
- 在有条件的向量中找到最接近的数字
- 我需要在给定数字中找到与平均值的最接近(和次要)数字
- 将十进制数字截断为最接近的4个小数和断言
- 从均匀网格中查找最接近的数字
- 如何在 c++ 中获取最接近平均值的数字
- 找到最接近另一个数字 c++ 的数字
- 使用数组查找最接近的数字C++,浮点
- 从一组数字中找出最接近的三个数字值
- 查找数组中与另一个给定数字最接近的数字
- 寻找最接近的数字
- 在两个数组中查找最接近的数字
- 如果输入的数字不是完全正方形,则找到最接近的完美正方形