【发布时间】:2020-10-01 06:54:49
【问题描述】:
我有一个整数向量scores = 10, 23, 29, 77, 8, 43, 56, 3
连同一个号码predict = 42
和start index = 2
我正在搜索两个数字,(大于和小于)接近predict = 42,在start index = 2 和end index = 7 的范围内
scores = {10, 23, 29, 77, 8, 43, 56, 3} (仅在 i=2 到 i=7 范围内搜索)
所以,
29比 predict=42 少一点而且,
43比预测的 42 多一点
我如何获得这些数字?
示例代码:
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> scores = {10, 23, 29, 77, 8, 43, 56, 3}; //Unsorted
int predict = 42;
int startFromIndex = 2;
int littleLessThanPredict; // = 29
int littleMoreThanPredict; // = 43
//lower_bound
//upper_bound
return 0;
}
鉴于这种情况,
- 如何在未排序的范围内使用
std::lower_bound和std::upper_bound函数? - 如何临时对向量的一部分进行排序并应用我的自定义函数?
- 有没有办法结合
std::min_element和std::lower_bound函数来获得想要的结果?
【问题讨论】:
-
也许任务是让你自己想出一个算法?任务的要求和限制是什么?你从哪里得到的任务?你有没有和你的教授/老师/助教谈过这个(如果是学校作业)?
-
不是学校作业,它是一个控制台/文本游戏,而且,我正在尝试在其中一个步骤中实现此功能。我无法弄清楚 lambda 函数或异地排序算法的语法
-
我不明白你为什么需要
lower/upper_bound。你不能只 for 循环从start index开始并以end index结束,如果你发现一个低于predict的数字,你把它保存在littleLessThanPredict,如果它更大,你把它保存在littleMoreThanPredict。然后继续,如果你找到一个大于littleLessThanPredict但小于predict的数字,你更新littleLessThanPredict,如果你找到一个小于littleMoreThanPredict但大于predict的数字,你更新littleMoreThanPredict。跨度> -
如果对分数进行了排序,
lower_bound(scores.begin(), scores.end(), 42)将返回一个指向 43 而不是 29 的迭代器