#include
#include
#include
#include
using namespace std;
typedef struct TNodeTab
{
string value;
int key;
}TNode;
class Lru
{
public:
bool put(TNode node)
{
auto res = m_map.find(node.key);
if(res != m_map.end())//key已存在,擦除已存在的数据
{
auto ptr = res->second;//返回list::iterator
m_list.erase(ptr);
}
if(size >= 5)
{
m_map.erase(m_list.back().key);//擦除map中的记录
m_list.pop_back();擦除list中的记录
size = 4;
}
m_list.push_front(node);
m_map[node.key] = m_list.begin();//如果key存在,更新iterator,否则插入
size++;
for(auto i:m_list)
{
cout<<i.value<<"";
}
cout<<endl;
};
bool get(TNode node,TNode& resNode)
{
auto res = m_map.find(node.key);
if(res == m_map.end())
return false;
resNode = *(res->second);//返回指向list中数据的iterator
m_list.splice(m_list.begin(),m_list,res->second);//把这个指针指向最list最前端
for(auto i:m_list)
{
cout<<i.value<<"";
}
cout<<endl;
};
private:
unordered_map<int,list<TNode>::iterator> m_map;
list<TNode> m_list;
uint32_t size;
public:
Lru(){};
~Lru(){};
};
int main()
{
Lru lru;
TNode node[8];
node[0].key =1;
node[0].value ="a";
node[1].key =2;
node[1].value ="b";
node[2].key =3;
node[2].value ="c";
node[3].key =4;
node[3].value ="d";
node[4].key =5;
node[4].value ="e";
node[5].key =6;
node[5].value ="f";
node[6].key =7;
node[6].value ="g";
lru.put(node[0]);
lru.put(node[1]);
lru.put(node[2]);
lru.put(node[3]);
lru.put(node[4]);
lru.put(node[5]);
lru.put(node[6]);
lru.get(node[3],node[7]);
// lru.put(node[6]);
// lru.get(node[2],node[7]);
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)