1_N绑定器

来源:互联网 发布:2016网络大电影排名 编辑:程序博客网 时间:2024/05/28 09:32
/*********************************************************************  文件名:   Map_Binder.h*  文件描述: 1:N绑定器*  创建人:   陈泽丹 ,2012年10月25日     *  版本号:   1.0*  备注:     有时侯会有一些额外的绑定需求或者映射需求,例如应用层的需要把不同模块不同实例的ID绑定到一个活动ID上.********************************************************************///1:N绑定器class Map_For_1_And_N{public://绑定索引和UID( 1:N )bool bind_left_and_right( long _left, long _right ){vector<long>* p_set = &left_set[_left];if( p_set->end() == find(p_set->begin(),p_set->end(), _right) ){p_set->push_back(_right);right_set[_right] = _left;return true;}return false;}//通过left获得rigth表vector<long>* get_t_right_by_left( long _left ){if( left_set.end() == left_set.find(_left) ){return NULL;}return &left_set[_left];}//通过right获得leftlong get_left_by_right( long _right ){if( right_set.end() == right_set.find(_right) ){return 0;}return right_set[_right];}//清除绑定void clear( long _left ){vector<long>* p_right = get_t_right_by_left( _left );for(long i=0; i<p_right->size(); ++i){right_set.erase( (*p_right)[i] );}left_set.erase(_left);}//清除右项绑定void clear_right( long _left, long _right ){vector<long>* p_right = get_t_right_by_left( _left );vector<long>::iterator it = find(p_right->begin(),p_right->end(), _right);if( p_right->end() != it )p_right->erase(it);right_set.erase(_right);}private:map< long, vector<long> > left_set;map< long, long > right_set;};

原创粉丝点击