LRU设计

Posted simple_wxl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LRU设计相关的知识,希望对你有一定的参考价值。

list是双向链表,map保存key对应到list中的迭代器的位置,list保存<key,value>

class LRUCache{
public:
LRUCache(int capacity) {
c = capacity;
}

int get(int key) {
if (mymap.count(key)==0)
return -1;
list<pair<int, int>>::iterator it = mymap[key];
int val = it->second;
mylist.erase(it);
mylist.push_front(pair<int,int>(key,val));
mymap[key] = mylist.begin();
return val;
}

void set(int key, int value) {
if (mymap.count(key) != 0)
{
list<pair<int, int>>::iterator it = mymap[key];
mylist.erase(it);
mylist.push_front(pair<int, int>(key, value));
mymap[key] = mylist.begin();
}
else
{
if (mymap.size() == c)
{
mymap.erase(mylist.back().first);
mylist.pop_back();
}
mylist.push_front(pair<int, int>(key, value));
mymap[key] = mylist.begin();
}
}
private:
list<pair<int, int>> mylist;
map<int, list<pair<int,int>>::iterator> mymap;
int c;

};

以上是关于LRU设计的主要内容,如果未能解决你的问题,请参考以下文章

设计和实现一个LRU缓存类

LRU设计

c_cpp lru,LRU,设计并实现最近最少使用(LRU)缓存的数据结构。它应该支持以下操作:get和set

程序员代码面试指南第二版 156.设计LRU缓存结构

牛客Top200 --- 设计LRU缓存结构详解

高效设计一个LRU,你可以看这篇