LRUCache

来源:互联网 发布:js 对象数组 编辑:程序博客网 时间:2024/04/27 18:08

Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.

get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.

set(key, value) - Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.




class LRUCache{public:   struct CacheNode{CacheNode(int k, int v) :key(k), value(v) {}int key;int value;};LRUCache(int capacity) {this->capacity = capacity;}int get(int key) {if (addmap.find(key) != addmap.end()){lst.splice(lst.begin(), lst, addmap[key]);addmap[key] = lst.begin();return addmap[key]->value;}return -1;}void set(int key, int value) {if (addmap.find(key) != addmap.end()){addmap[key]->value = value;lst.splice(lst.begin(), lst, addmap[key]);addmap[key] = lst.begin();}else {if (capacity == lst.size()){addmap.erase(lst.back().key);lst.pop_back();}lst.push_front(CacheNode(key, value));addmap[key] = lst.begin();}}private:int capacity;std::list<CacheNode> lst;std::unordered_map<int, list<CacheNode>::iterator> addmap;};


0 0