set 利用lower_bound实现key索引
set中数据类型为结构体T,T中有两个成员key和val定义如下:
struct T{ int key,val; T(int k,int v):key(k),val(v){} bool operator<(const T &other)const{
return key<other.key; } }; set<T> s;
现在想在O(logN)时间内,根据key的值在set中找到它并得到其val
由于find是完全匹配,不能满足要求,所以只能通过lower_bound,找到第一个>=key的元素,然后判断是否为目标元素
int main(){ //set<T> s; s.insert(T(1,2)); s.insert(T(3,3)); s.insert(T(2,4)); //目标:找到key=1的元素 set<T>::iterator itr = s.lower_bound(T(1,-2147483648));//代入key=1的最小的T if(itr!=s.end()&&itr->key==1){ cout<<itr->key<<" "<<itr->val<<endl; } else{ cout<<"Not Found!"<<endl; } }