leetcode 146 —— LRU Cache

来源:互联网 发布:塔里木农垦大学知乎 编辑:程序博客网 时间:2024/05/18 03:15

思路:hash_map 和list 容器

class LRUCache{public:struct node{int key;int value;node(int k, int v) :key(k), value(v){}};LRUCache(int capacity) {mCapacity = capacity;}int get(int key) {if (visited.find(key) == visited.end())return -1;MoveToHead(key);return visited[key]->value;}void set(int key, int value) {if (visited.find(key) == visited.end()){node add(key, value);if (LRUcache.size() >= mCapacity){   //腾出空间visited.erase(LRUcache.back().key);LRUcache.pop_back();   //删除最前面的}LRUcache.push_front(add);visited[key] = LRUcache.begin();return;}else{visited[key]->value = value;MoveToHead(key);}}private:unordered_map<int, list<node>::iterator> visited;list<node> LRUcache;int mCapacity;void MoveToHead(int key){auto updateEntry = *visited[key];//记录当前的值LRUcache.erase(visited[key]);//从原位置删除LRUcache.push_front(updateEntry);visited[key] = LRUcache.begin();}};


0 0