如何找到向量中第一个小于整数 X 的元素? (c++)

2024-05-01

如果我有以下向量 {10 10 10 20 20 20 30 30} 我想要一个函数返回 = X 的整数的位置或直接返回 X 之后的较小元素,例如如果我正在搜索 11 我希望函数返回 2 因为第二个元素(10)是第一个较小的元素向量中大于 11 的元素。
我尝试使用 lower_bound 但这不起作用。

int myints[] = {10,20,30,30,20,10,10,20};
vector<int> v(myints,myints+8);           // 10 20 30 30 20 10 10 20
vector<int>::iterator low,up;

sort (v.begin(), v.end());                // 10 10 10 20 20 20 30 30

low=lower_bound (v.begin(), v.end(), 11); //
up= upper_bound (v.begin(), v.end(), 11); //

cout << "lower_bound at position " << int(low- v.begin()) << endl;
cout << "upper_bound at position " << int(up - v.begin()) << endl;

return 0;

该代码输出:

lower_bound at position 3
upper_bound at position 3

cppreference 告诉我std::lower_bound

返回一个迭代器,指向范围 [first, last) 中的第一个元素,即不小于值

and std::upper_bound

返回一个迭代器,指向范围 [first, last) 中的第一个元素,即大于值

在这种情况下,给定一个包含10 10 10 20 20 20 30 30我希望两个函数都指向第一个20,它位于向量中的位置 3,并且确实是您两次得到的结果。如果你要求的是20, std::lower_bound将返回一个指向第一个的迭代器20在向量中(位置 3)...第一个数字不小于 20,与您要求时得到的结果相同11。但在这种情况下,std::upper_bound将返回一个指向第一个的迭代器30(位置 6),这是第一个大于 20 的值。

只需将迭代器向后移动一位即可获得小于目标数字的最后一个值,std::prev是做到这一点的一种方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何找到向量中第一个小于整数 X 的元素? (c++) 的相关文章

随机推荐