首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么这两种binary_search方法结果不同解决办法

2012-03-05 
为什么这两种binary_search方法结果不同intia[8]{1,3,6,10,15,21,28,36}vector intivec(ia,ia+8)list

为什么这两种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的前提是排序区间,你连这个前提满足不了,什么结果都是正常的。

热点排行