使用迭代器位置的线性和二叉搜索
Linear and Binary search using iterator position
我正在编写两个函数,第一个函数进行线性搜索,如果它在向量中,应该返回第一个找到的值的位置。第二种方法是使用 equal_range 完成的二叉搜索,它应该返回与线性搜索相同的内容。目前,他们正在检查每个值是否匹配。任何帮助,不胜感激。
int linearSearch( const vector<int>& vec, int z)
{
vector<int>::iterator iter = find(vec.begin(), vec.end(), z);
if (iter != vec.end())
return (iter-vec.begin());
else
return -1;
}
int binarySearch( const vector<int>& vec, int z)
{
pair<vector<int>::const_iterator, vector<int>::const_iterator> bounds;
bounds = equal_range(vec.begin(),vec.end(), z);
if (bounds.first != vec.end())
return (bounds.first -vec.begin());
else
return -1;
}
您的描述不清楚,但我会指出代码的一些问题。
在binarySearch()
搜索中,有
bounds = equal_range(vec.begin(),vec.end(), z);
if (bounds.first != v.end())
return (bounds.first -v.begin());
v
没有在任何地方声明。 如果代码编译,那么,大概,它是在你没有显示的代码中的某个地方声明的。 但它可能与vec
无关。 代码的行为(特别是return
)将是不确定的。
函数之间一个相当根本的区别是因为std::equal_range()
假定一个排序(或分区)范围,而std::find()
则不然。
相关文章:
- 向量上的线性搜索
- 二叉搜索如何比线性搜索更快?
- C++(线性搜索和排序)
- C++线性搜索算法,确定数组中元素的数量
- 如何在 c++ 中线性搜索两个数组?
- 变量未在此范围内声明 数组线性搜索
- 如何在 c++ 中对两个向量进行线性搜索?
- 线性搜索 MPI(在其他进程中停止)
- SIMD 线性搜索比展开循环慢
- 为什么此基准代码用于线性和二进制搜索不起作用
- 是否可以显示需要线性搜索的时间才能找到您在程序中找到的密钥
- 如何在C 中解决线性搜索问题
- 这是哨兵线性搜索的错误方法吗?
- 数组中的线性搜索返回意外结果
- 在不进行线性搜索的情况下,在非常大的数组中找到比给定数字更小的数字
- C++线性搜索算法
- 为什么排序调用比较函数的频率低于线性最小搜索算法
- 线性搜索算法
- 使用迭代器位置的线性和二叉搜索
- 关于修复对向量的线性搜索函数的调用的建议