C++ 比较向量中的元素并返回对象的最佳方法

C++ 比较向量中的元素并返回对象的最佳方法,c++,stl,C++,Stl,我有一个用例,其中数字在整数向量中单调递增 vec[0] = 2 vec[1] = 5 vec[2] = 8 vec[3] = 10 .. 如果我通过了数字6,我想返回vec[1],因为它位于vec[1]和vec[2]之间,同样,如果通过9,则必须返回vec[2]。我对STL的经验有限,所以想检查一下我们可以用STL解决这个问题吗,或者你必须通过存储上一个来迭代每个问题,当遇到一个比传递的数字大的数字时,你可以返回你可以使用二进制搜索。你可以使用二进制搜索。有一个二进制搜索()标题中的功能。不

我有一个用例,其中数字在整数向量中单调递增

vec[0] = 2
vec[1] = 5
vec[2] = 8
vec[3] = 10
..

如果我通过了数字6,我想返回vec[1],因为它位于vec[1]和vec[2]之间,同样,如果通过9,则必须返回vec[2]。我对STL的经验有限,所以想检查一下我们可以用STL解决这个问题吗,或者你必须通过存储上一个来迭代每个问题,当遇到一个比传递的数字大的数字时,你可以返回你可以使用二进制搜索。

你可以使用二进制搜索。

有一个
二进制搜索()
标题中的功能。不幸的是,这个函数只返回一个布尔值。您可以在排序向量上编写自己的二进制搜索,对于大型列表,这将比在原始帖子中暗示的线性搜索更快。(如果我误读了这篇文章,我深表歉意)。

标题中有一个
二进制搜索()
函数。不幸的是,这个函数只返回一个布尔值。您可以在排序向量上编写自己的二进制搜索,对于大型列表,这将比在原始帖子中暗示的线性搜索更快。(如果我误读了这篇文章,我深表歉意)。

STL在
、和中有四种可重用的二进制搜索算法


lower_bound
并不能完全满足您的要求:当所需元素在序列中不存在时,它返回一个迭代器,该迭代器引用所需元素的前一个元素。但是,您应该能够用实现您的行为的代码来包装它,而不会有太多麻烦。

STL在
、、、和中有四种可重用的二进制搜索算法


lower_bound
并不能完全满足您的要求:当所需元素在序列中不存在时,它返回一个迭代器,该迭代器引用所需元素的前一个元素。但是,您应该能够用实现您的行为的代码来包装它,而不会有太多麻烦。

这是一个很好的例子,说明了为什么良好的命名很重要。许多正在寻找二进制搜索的人不会找到下限、上限或相等范围,除非他们已经知道这些也是二进制搜索。这是一个很好的例子,说明了为什么好的命名很重要。许多正在寻找二进制搜索的人不会找到下限、上限或相等范围,除非他们已经知道这些也是二进制搜索。