//广义表
template< class _ID_TYPE, class _V_TYPE>
class CLK_General_Map
{
public:
typedef vector< _V_TYPE > Map_Items_Type;
typedef map< _ID_TYPE, Map_Items_Type* > General_Map_Type;
class Items
{
public:
Items(General_Map_Type* _p_general_map, _ID_TYPE _ID):m_p_general_map(_p_general_map), m_ID(_ID){}
bool is_exist()
{
if( 0 == (*m_p_general_map)[m_ID])
return false;
return true;
}
bool push(_V_TYPE _val)
{
if( 0 == (*m_p_general_map)[m_ID])
{
Map_Items_Type* pItems = new Map_Items_Type();
(*m_p_general_map)[m_ID] = pItems;
}
_V_TYPE pItem = get_item(_val);
if( NULL == pItem)
{
(*m_p_general_map)[m_ID]->push_back(_val);
return true;
}
else
{
return false;
}
}
_V_TYPE get_item(_V_TYPE _val)
{
if( 0 != (*m_p_general_map)[m_ID])
{
Map_Items_Type* pItems = (*m_p_general_map)[m_ID];
Map_Items_Type::iterator pIt = find(pItems->begin(), pItems->end(), _val);
if( pIt != pItems->end())
return *pIt;
}
return NULL;
}
void remove(_V_TYPE _val)
{
if( 0 != (*m_p_general_map)[m_ID])
{
Map_Items_Type* pItems = (*m_p_general_map)[m_ID];
Map_Items_Type::iterator it = find(pItems->begin(),pItems->end(),_val);
pItems->erase(it);
}
}
vector< _V_TYPE >* get_set()
{
return (*m_p_general_map)[m_ID];
}
void erase()
{
if( 0 != (*m_p_general_map)[m_ID])
{
Map_Items_Type* pItems = (*m_p_general_map)[m_ID];
pItems->clear();
delete pItems;
pItems = NULL;
(*m_p_general_map)[m_ID] = NULL;
(*m_p_general_map).erase(m_ID);
}
}
private:
General_Map_Type* m_p_general_map;
_ID_TYPE m_ID;
};
Items get_manager(_ID_TYPE _ID)
{
Items it(&m_general_map, _ID);
return it;
}
void clear()
{
General_Map_Type::iterator it = m_general_map.begin();
while(it != m_general_map.end())
{
get_manager(it->first).erase();
it = m_general_map.begin();
}
}
size_t get_all_size()
{
struct MapCount
{
MapCount():m_count(0){}
void operator()(pair<_ID_TYPE, Map_Items_Type*> _items){ m_count += _items.second->size(); }
int m_count;
};
MapCount map_count = for_each(m_general_map.begin(),m_general_map.end(),MapCount());
return map_count.m_count;
}
private:
General_Map_Type m_general_map;
};
//广义表
最新推荐文章于 2020-12-03 21:43:12 发布