map和list一样,在平时的开发中,我们经常用到,今天记录一下map容器的应用。
template< typename K, typename D>
class CStlClassMap
{
public:
CStlClassMap() {}
virtual ~CStlClassMap() { this->TkaClear(); }
public:
D* TkaAddItem( K kAa )
{
typename CStlClassMap<K,D>::CStlClassMapData::iterator it = m_TkaMap.find(kAa);
if(it != m_TkaMap.end())
return it->second;
D *pItem = new D(kAa);
if(!pItem)
return 0;
m_TkaMap[kAa] = pItem;
return pItem;
}
D* TkaGetItem( K kAa )
{
typename CStlClassMapData::iterator it = m_TkaMap.find(kAa);
if(it == m_TkaMap.end())
return 0;
return it->second;
}
D* TkaGetFrontItem(K& kAa)
{
typename CStlClassMapData::iterator it = m_TkaMap.begin();
if (it == m_TkaMap.end())
return 0;
kAa = it->first;
return it->second;
}
bool TkaRemove( K kAa )
{
D* pItem = this->TkaGetItem(kAa);
if(!pItem)
return false;
m_TkaMap.erase(kAa);
delete pItem;
return true;
}
void TkaClear()
{
typename CStlClassMapData::iterator it = m_TkaMap.begin();
for(;it != m_TkaMap.end(); it++)
{
D *pItem = it->second;
delete pItem;
}
m_TkaMap.clear();
}
void TkaGetAllItem( list<D*> &tList )
{
typename CStlClassMapData::iterator it = m_TkaMap.begin();
for(;it != m_TkaMap.end(); it++) {
tList.push_back(it->second);
}
}
void TkaGetAllK(list<K> &tList)
{
typename CStlClassMapData::iterator it = m_TkaMap.begin();
for(;it != m_TkaMap.end(); it++) {
tList.push_back(it->first);
}
}
void TkaGetAllKButMe(list<K> &tList,K meK)
{
typename CStlClassMapData::iterator it = m_TkaMap.begin();
for(;it != m_TkaMap.end(); it++)
{
K iaa = it->first;
if( iaa==meK )
continue;
tList.push_back( iaa );
}
}
int TkaGetTotalCt(){ return m_TkaMap.size(); }
public:
typedef map<K,D*> CStlClassMapData;
CStlClassMapData m_TkaMap;
};