关于二分查找函数binary_search的结构体struct运用


在做一道题目的时候,需要在结构体容器中查找是否存在满足等于某个值的结构体中其中的一个元素的结构体在这个容器中。(有点绕口)

但苦于元素是结构体的时候一筹莫展,由老师启发尝试重载运算符,从而实现了可以用于结构体的二分查找函数的运用。

一、二分查找binary_search基本用法

  头文件是#include (当然还是力推万能头文件#include !!(逃

  其实现的是以复杂度为O(logN)判断数组或容器内是否有需要查找的元素。返回值类型为bool型(查找到为1,否则为0)。

  最简单的(非结构体)形式例如:

    数组中:binary_search(a, a+n, value);  //判断数组a在0到n的范围内是否有value

    容器中:binary_search(a.begin(), a.end(), value)  //判断整个容器a中是否有value

 

二、binary_search结合struct的用法

  譬如我们给出以下的结构体node

struct node
{
  int num;
  int cnt;
  bool operator<(const node& b)const 
  {
    return this->num < b.num;
  }
};

 

  我们现在再定义一个容器,就拿最简单的vector的举例:

vector q;

  再一个个插入元素后(略去不表),我们可以通过以下方式判断结构体node中是否有num相同的元素:

cin>>a;  //a是我们需要在结构体容器中查找是否有元素的num==a的a
node temp;  //建立一个暂时的temp变量
temp.num = a;
temp.cnt = 0;  //这一步可以随意赋值(按题目要求来),我们任务仅仅是判断容器中有元素的num等于a
binary_search(q.begin(),q.end(),temp);  
//核心代码,第一个是容器的首迭代器,第二个是容器尾迭代器,第三个是含有我们目标num==a的temp