/********************************************************************
* 文件名: 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获得left
long 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;
};
1_N绑定器
最新推荐文章于 2023-08-21 10:28:52 发布
2486

被折叠的 条评论
为什么被折叠?



