#include <iostream>
#include <thread>
#include <mutex>
#include<condition_variable>
#include <atomic>
#include<unordered_map>
using namespace std;
class MYLRU {
private:
struct node {
int k;
int v;
node(int a, int b)
{
k = a;
v = b;
}
};
public:
MYLRU(int c):capity(c) {
}
int get(int key)
{
if (mymap.find(key) == mymap.end())
return -1;
mylist.splice(mylist.begin(), mylist, mymap[key]);
return mymap[key]->v;
}
void set(int key, int value)
{
if (mymap.find(key) == mymap.end())
{
if (capity == mymap.size())
{
mymap.erase(mylist.back().k);
mylist.pop_back();
}
mylist.push_front(node(key, value));
mymap[key] = mylist.begin();
}
else
{
mylist.splice(mylist.begin(), mylist, mymap[key]);
mylist.begin()->v = value;
}
}
private:
int capity;
unordered_map<int, list<node>::iterator>mymap;
list<node>mylist;
};
int main()
{
MYLRU mylru(3);
while (1)
{
int flag,k,v;
cin >> flag;
if (flag == 1)
{
cin >> k >> v;
mylru.set(k, v);
}
else
{
cin >> k;
cout << mylru.get(k) << endl;
}
}
return 0;
}
C++实现LRU算法
猜你喜欢
转载自blog.csdn.net/fbher/article/details/100695532
今日推荐
周排行