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

Posted LisavilaLee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于二分查找binary_search的结构体struct运用相关的知识,希望对你有一定的参考价值。

在做一道题目的时候需要用到二分查找。

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

 

一、二分查找binary_search基本用法

 

  头文件是#include <algorithm>(当然还是力推万能头文件#include <bits/stdc++.h>!!(逃

  其实现的是以复杂度为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<node> 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

 

以上是关于关于二分查找binary_search的结构体struct运用的主要内容,如果未能解决你的问题,请参考以下文章

Java数据结构——二分查找

stl中的二分查找

STL之二分查找 (转载)

C++二分查找常用函数

STL二分算法

STL二分算法