關於二分查詢binary_search的結構體struct運用
阿新 • • 發佈:2021-08-29
在做一道題目的時候需要用到二分查詢。
但苦於元素是結構體的時候一籌莫展,由老師啟發嘗試過載運算子,從而實現了可以用於結構體的二分查詢函式的運用。
一、二分查詢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