C++技术之路:map容器

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;
};
发布了11 篇原创文章 · 获赞 0 · 访问量 299

猜你喜欢

转载自blog.csdn.net/slyw77slyw/article/details/105287850