欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

关于在二进制搜索中使用结构体

最编程 2024-07-07 09:34:33
...

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

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

一、二分查找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

推荐阅读