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;
    }
}
原文地址:https://www.cnblogs.com/liziran/p/7275340.html