使用迭代器位置的线性和二叉搜索

Linear and Binary search using iterator position

本文关键字:搜索 线性 迭代器 位置      更新时间:2023-10-16

我正在编写两个函数,第一个函数进行线性搜索,如果它在向量中,应该返回第一个找到的值的位置。第二种方法是使用 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()则不然。