Algorithm 标准::二进制搜索不';I don’我没有按预期工作

Algorithm 标准::二进制搜索不';I don’我没有按预期工作,algorithm,vector,binary-search,Algorithm,Vector,Binary Search,我试着制作一个程序,用std::binary\u search 我知道我可以使用std::find,但我听说std::binary\u search如果比std::find快得多,所以我想学会在需要检查容器中是否有数字时使用它 代码: 1° 2° 它将继续这样,直到我输入最后两个数字中的一个(99或558) 前最后一个号码: Enter a number: 99 It exists! Enter a number: 558 It exists! 最后号码: Enter a number: 9

我试着制作一个程序,用
std::binary\u search

我知道我可以使用
std::find
,但我听说
std::binary\u search
如果比
std::find
快得多,所以我想学会在需要检查容器中是否有数字时使用它

代码:

它将继续这样,直到我输入最后两个数字中的一个(
99
558

前最后一个号码:

Enter a number: 99
It exists!
Enter a number: 558
It exists!
最后号码:

Enter a number: 99
It exists!
Enter a number: 558
It exists!
我不知道为什么会这样。 如果有人能解释为什么会发生这种情况,为什么只有最后两个数字起作用? 这个问题的解决方案是什么


谢谢

你误解了它的工作方式:你不能按任意顺序输入数字,而期望
二进制搜索
找到匹配项;必须订购范围内的项目。这是二进制搜索在决定从中间、右边还是左边开始时所做的假设

如果在读取数据后将这一行添加到代码中,问题将得到解决:

std::sort(v.begin(), v.end());
此外,如果您按排序顺序输入数字,则代码将在不进行修改的情况下工作:

-112 -99 -17 -11 1 10 44 99 100 558

通常二进制搜索应用于已排序的向量或数组

ur的似乎未排序


对向量排序,然后重新检查结果。

谢谢!什么原因需要对数字进行排序才能使
binary\u search
正常工作?@ihatestrings binary search是在字典中查找单词的方法。现在想象一下,当字典未排序时应用相同的方法。
std::sort(v.begin(), v.end());
-112 -99 -17 -11 1 10 44 99 100 558