1. 程式人生 > 其它 >關於二分查詢binary_search的結構體struct運用

關於二分查詢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