template <typename T>
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<std::string, T>(key, val));
_life_map.insert(std::pair<std::string, int>(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<std::string, int>::iterator iter;
for (iter = _life_map.begin(); iter != _life_map.end(); iter++)
{
_life_map[iter->first]++;
}
}
std::string FindMaxLiefMap()
{
std::string retKey = "";
std::map<std::string, int>::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<std::string, T> _cache_map;
std::map<std::string, int> _life_map;
};
c++ 一個簡單的頁面置換實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.