LRU cache实现
来源:互联网 发布:英语学习软件有哪些 编辑:程序博客网 时间:2024/05/22 11:51
简单的链表实现
class LRUCache {private: struct Node { Node *prev; Node *next; int key; int value; Node(int k,int v, Node* p = nullptr, Node *n = nullptr) :key(k),next(n), prev(p), value(v) {}; };public: LRUCache(int capacity) { maxCapacity = capacity;//最大容量 size = 0;//当前cache中的结点数量 head = nullptr;//头指针 tail = nullptr;//尾指针 } //取出key的值 int get(int key) { //看看key是否在map中,map存放的是key所在结点的指针 auto i = mapTable.find(key); if (i == mapTable.end()) return -1; else { //在map中,将node从原先位置删除,移动到头部 Node *node = (*i).second; removeNode(node); addNode(node); return node->value; } } void put(int key, int value) { auto i = mapTable.find(key); if (i == mapTable.end()) { //检查是否超出容量 if (size == maxCapacity) { Node *tmp = tail; removeNode(tail); mapTable.erase(tmp->key); delete tmp; } Node *node = new Node(key, value); addNode(node); mapTable[key] = node; } else { //在map中直接移动位置修改值即可 Node *node = (*i).second; removeNode(node); addNode(node); node->value = value; } }private: //添加node到头部 void addNode(Node *node) { if (head == nullptr) { head = node; head->prev = nullptr; tail = node; tail->next = nullptr; } else { head->prev = node; node->next = head; node->prev = nullptr; head = head->prev; } ++size; } //从把node从原先位置删除 void removeNode(Node *node) { if (node == head) { if (node->next == nullptr) { head = nullptr; tail = nullptr; } else { head = head->next; head->prev = nullptr; } } else if (node == tail) { tail = tail->prev; tail->next = nullptr; } else { node->prev->next = node->next; node->next->prev = node->prev; } --size; }private: int maxCapacity; int size; Node *head; Node *tail; map<int, Node*> mapTable;};
LRUCache cache = new LRUCache( 2 /* capacity */ );cache.put(1, 1);cache.put(2, 2);cache.get(1); // returns 1cache.put(3, 3); // evicts key 2cache.get(2); // returns -1 (not found)cache.put(4, 4); // evicts key 1cache.get(1); // returns -1 (not found)cache.get(3); // returns 3cache.get(4); // returns 4
0 0
- LRU cache的实现
- LRU cache实现 (Java)
- [Google] LRU cache实现
- 实现LRU Cache
- 如何实现 LRU Cache?
- LRU Cache实现
- LRU Cache的实现
- LRU Cache 实现
- 简单LRU cache 实现
- LRU cache实现
- LRU cache实现 (Java)
- LRU cache实现
- LRU Cache的实现
- 如何实现 LRU Cache
- LRU Cache的实现
- LRU cache实现
- Python 实现LRU Cache
- 【链表】实现LRU缓存策略LRU Cache
- iis8.5下wordpress 404问题
- 错误 V4L2CameraDevice: select timeout
- org.hibernate.HibernateException: No CurrentSessionContext configured!
- selenium2: Click radio button 不生效的解决方法
- [LintCode]Binary Representation
- LRU cache实现
- awt 实现窗口重绘
- PHP时间戳函数总结一览(转)
- tensorflow28《TensorFlow实战Google深度学习框架》笔记-10-05 同步更新模式样例程序 code
- SVN+apache整合
- Python字符编码问题学习
- SVN增量备份一:svnsync
- svnsync问题: have you committed to the destination without using svnsync
- Java Socket: 服务器重启,客户端自动重连