读书人

为什么这两种binary_search方法结果不

发布时间: 2012-03-05 11:54:02 作者: rapoo

为什么这两种binary_search方法结果不同
int ia[8]={1,3,6,10,15,21,28,36};
vector <int> ivec(ia,ia+8);
list <int> ilist(ia,ia+8);

string sa[10]={ "The ", "light ", "untonsuared ", "hair ", "grained ", "and ", "hued ", "like ", "pale ", "oak "};
vector <string> svec(sa,sa+10);
list <string> slist(sa,sa+10);



bool found_it=false;
found_it=binary_search(ilist.begin(),ilist.end(),15);//返回1
found_it=binary_search(ivec.begin(),ivec.end(),15,greater <int> ());//返回0
但是如果上句改为以下两句就对了:
sort(ivec.begin(),ivec.end(),greater <int> ());
found_it=binary_search(ilist.begin(),ilist.end(),15);//返回1


[解决办法]
你最好找个2分搜索的原理看看。
因为你原始数据是升序的,用greater <int> 比较,第一个数就导致2分搜索结束了。
[解决办法]
binary_search的前提是排序区间,你连这个前提满足不了,什么结果都是正常的。

读书人网 >C++

热点推荐