查找時前先要對數據預處理排序(升序)
數組形式
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct node{
int x;
int y;
node(int x=0,int y=0):x(x),y(y){}
};
bool cmp(node a,node b){//不能加&
if (a.x==b.x)
return a.y<b.y;
else
return a.x<b.x;
}
struct cmp1{
bool operator () (const node& a,const node& b)const {
return a.x<b.x;
}
};
vector<node> a;
int main(){
node s=node(3,3);
node a[]={{1,1},{3,2},{3,3},{4,1},{4,2}};
//vector<node>::iterator it=
cout<<lower_bound(a,a+5,s,cmp)-a<<" "<<upper_bound(a,a+5,s,cmp)-a;
// 或cout<<lower_bound(a,a+4,s,cmp1())-a;
system("pause");
return 0;
}
vector容器
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct node{
int x;
int y;
node(int x=0,int y=0):x(x),y(y){}
};
bool cmp(node a,node b){//不能加&
if (a.x==b.x)
return a.y<b.y;
else
return a.x<b.x;
}
struct cmp1{
bool operator () (const node& a,const node& b)const {
return a.x<b.x;
}
};
vector<node> a;
int main(){
a.push_back(node(1,1));
a.push_back(node(2,2));
a.push_back(node(3,3));
a.push_back(node(4,4));
node s=node(3,5);
//vector<node>::iterator it=
cout<<lower_bound(a.begin(),a.end(),s,cmp1())-a.begin();
system("pause");
return 0;
}
模糊查找(浮點型)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
bool cmp(double a,double b){//不能加&
return (fabs(b-a)>=0.01)&&(a<b);//小於0.01返回false 即相等
}
int main(){
double a[]={1.12,2.31,2.32,2.32,2.33,4.32,5.32};
double s=2.32;
cout<<lower_bound(a,a+7,s,cmp)-a<<" "<<upper_bound(a,a+7,s,cmp)-a;
system("pause");
return 0;
}