1_N绑定器

/********************************************************************
*  文件名:   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;
};

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值