LRU的简单实现
最近最少使用缓存(LRU),该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| class LRUCache { public: LRUCache(int capacity) : max_size(capacity) { } int get(int key) { auto res = map.find(key); if(res != map.end()){ list.splice(list.begin(), list, res->second); return res->second->second; } else { return -1; } }
void put(int key, int value) { auto res = map.find(key); list.push_front(std::make_pair(key, value)); if(res != map.end()){ list.erase(res->second); map.erase(res); } map[key] = list.begin();
if(map.size() > max_size){ auto last = list.end(); --last; map.erase(last->first); list.pop_back(); } }
public: std::unordered_map<int, std::list<std::pair<int, int>>::iterator> map; std::list<std::pair<int, int>> list; int max_size = 0; };
|