自己写的,不知道咋错了
class LRUCache {
public:
unordered_map<int,int> cache;
unordered_map<int,int> appear;
int size;
int count;
int time;
LRUCache(int capacity) {
size = capacity;
count = 0;
time = 0;
}
int get(int key) {
time++;
if(!cache.count(key))
return -1;
else{
appear[key] = time;
return cache[key];
}
}
void put(int key, int value) {
time++;
if(cache.count(key)){
cache[key] = value;
appear[key] = time;
}
else{
if(count == size){
int min = 3001;
int minkey = -1;
for(auto &it : appear){
if(it.second < min){
min = it.second;
minkey = it.first;
}
}
cache.erase(minkey);
appear.erase(minkey);
cache[key] = value;
appear[key] = time;
}
else{
cache[key] = value;
appear[key] = time;
count++;
}
}
}
};
/**
* Your LRUCache object will be instantiated and called as such:
* LRUCache* obj = new LRUCache(capacity);
* int param_1 = obj->get(key);
* obj->put(key,value);
*/在这里插入代码片
list 的splice函数
https://blog.csdn.net/bichenggui/article/details/4674900