#include <iostream>
#include <string>
#include <unordered_map>
#include <list>
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())
{
auto ptr = res->second;
m_list.erase(ptr);
}
if(size >= 5)
{
m_map.erase(m_list.back().key);
m_list.pop_back();
size = 4;
}
m_list.push_front(node);
m_map[node.key] = m_list.begin();
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);
m_list.splice(m_list.begin(),m_list,res->second);
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]);
return 0;
}