C++的二进制搜索及其比较 我想在C++上对一个排序向量V进行二进制搜索。 特别是,我对求向量项的精确值不感兴趣。我想找到满足V[j-1]

C++的二进制搜索及其比较 我想在C++上对一个排序向量V进行二进制搜索。 特别是,我对求向量项的精确值不感兴趣。我想找到满足V[j-1],c++,binary-search,C++,Binary Search,的条目的位置j,它的标准函数是上界和下界。读这些 如果您将这些页面向下滚动一点,您会发现一些示例,这些示例应该会让事情变得清楚:用于此的标准函数是上限和下限。读这些 如果您将这些页面向下滚动一点,您会发现一些示例,这些示例应该会让事情变得清楚:有关Bartosz链接的函数的注释: 上限begin,end,value返回大于给定值的第一个元素。这是可以插入并保持顺序的时间间隔的结束或结束后的时间间隔 lower_boundbegin、end、value返回不小于给定值的第一个元素。这是可以

的条目的位置j,它的标准函数是上界和下界。读这些


如果您将这些页面向下滚动一点,您会发现一些示例,这些示例应该会让事情变得清楚:

用于此的标准函数是上限和下限。读这些


如果您将这些页面向下滚动一点,您会发现一些示例,这些示例应该会让事情变得清楚:

有关Bartosz链接的函数的注释:

上限begin,end,value返回大于给定值的第一个元素。这是可以插入并保持顺序的时间间隔的结束或结束后的时间间隔 lower_boundbegin、end、value返回不小于给定值的第一个元素。这是可以插入的间隔的开始 因此,在实践中:

std::vector<int> v = {1, 4, 7, 12, 17, 55};
int x = 8;
auto first = std::lower_bound(v.begin(), v.end(), x);
auto last = std::upper_bound(first, v.end(), x);

在给定迭代器之前插入,因此您可以始终在此处使用上界的结果。

有关函数Bartosz链接的注释:

上限begin,end,value返回大于给定值的第一个元素。这是可以插入并保持顺序的时间间隔的结束或结束后的时间间隔 lower_boundbegin、end、value返回不小于给定值的第一个元素。这是可以插入的间隔的开始 因此,在实践中:

std::vector<int> v = {1, 4, 7, 12, 17, 55};
int x = 8;
auto first = std::lower_bound(v.begin(), v.end(), x);
auto last = std::upper_bound(first, v.end(), x);

在给定迭代器之前插入,因此您可以始终在此处使用上界的结果。

根据您的要求,要使用的正确STL函数是上界。语法:

upper_bound(V.begin(),V.end(),val)-V.begin()

将返回您搜索的基于0的索引。

根据您的要求,要使用的正确STL函数是上限。语法:

upper_bound(V.begin(),V.end(),val)-V.begin()

将返回您搜索的基于0的索引。

是否应返回7?二进制搜索只是一个查看条目是否存在的函数,它不返回索引@Armin他想返回包含第一个大于X的值的索引。@Egari然后应该是3。他说他不想返回值,他想要索引。然而,您的示例并不满足V[3]@Armin的要求。事实上,我猜他忘记了基于零的索引,它不应该返回7吗?二进制搜索只是一个函数,用于查看条目是否存在,它不返回索引@Armin他想返回包含第一个大于X的值的索引。@Egari然后应该是3。他说他不想返回值,他想要索引。然而,你的例子并不能满足V[3]@Armin的要求。事实上,我猜他忘记了基于零的索引。多亏了大家的回答!!谢谢大家的回答!!