c++ 一个简单的页面置换实现

template 
struct CacheSequence
{
public:
	
	CacheSequence(const int seq_len)
	{
		_seq_len = seq_len;
	}
	void AddCache(const std::string& key, const T& val)
	{
		if (_cache_map.find(key) != _cache_map.end())
		{
			_life_map[key]++;
		}

		if (_cache_map.size() == seq_len)
		{
			std::string del_key = FindMaxLiefMap();
			_cache_map.erase(del_key);
			_life_map.erase(del_key);
		}

		_cache_map.insert(std::pair(key, val));
		_life_map.insert(std::pair(key, 0))
	}

	T VisitSequence(const std::string& key)
	{
		T retEmpyt;
		if (_cache_map.find(key) != _cache_map.end())
		{
			_life_map[key]--;
			GetOrder();
			return _cache_map[key];
		}
		return retEmpyt;
	}

private:
	void GetOrder()
	{
		std::map::iterator iter;
		for (iter = _life_map.begin(); iter != _life_map.end(); iter++)
		{
			_life_map[iter->first]++;
		}

	}
	std::string FindMaxLiefMap()
	{
		std::string retKey = "";
		std::map::iterator iter;
		int life_tink = 1e100;
		for (iter = _life_map.begin(); iter != _life_map.end(); iter++)
		{
			if (iter->second > life_tink)
			{
				life_tink = iter->second;
				retKey = iter->first;
			}
		}
		return retKey;
	}
private:
	int                                 _seq_len;
	std::map	    _cache_map;
	std::map          _life_map;

};

你可能感兴趣的:(c++,杂)