C++实现一个LRU Cache
来源:互联网 发布:iphone照片导出到mac 编辑:程序博客网 时间:2024/05/16 19:25
#include <iostream>#include <vector>#include <hash_map>using namespace std;using namespace stdext;template<class K, class T>struct LRUCacheEntry{K key;T data;LRUCacheEntry* prev;LRUCacheEntry* next;};template<class K, class T>class LRUCache{private:hash_map< K, LRUCacheEntry<K,T>* >_mapping;vector< LRUCacheEntry<K,T>* >_freeEntries;LRUCacheEntry<K,T> *head;LRUCacheEntry<K,T> *tail;LRUCacheEntry<K,T> *entries;public:LRUCache(size_t size){entries = new LRUCacheEntry<K,T>[size];for (int i=0; i<size; i++)_freeEntries.push_back(entries+i);head = new LRUCacheEntry<K,T>;tail = new LRUCacheEntry<K,T>;head->prev = NULL;head->next = tail;tail->next = NULL;tail->prev = head;}~LRUCache(){delete head;delete tail;delete [] entries;}void put(K key, T data){LRUCacheEntry<K,T>* node = _mapping[key];if(node){// refresh the link listdetach(node);node->data = data;attach(node);}else{if ( _freeEntries.empty() ){node = tail->prev;detach(node);_mapping.erase(node->key);node->data = data;node->key = key;attach(node);}else{node = _freeEntries.back();_freeEntries.pop_back();node->key = key;node->data = data;_mapping[key] = node;attach(node);}}}T get(K key){LRUCacheEntry<K,T>* node = _mapping[key];if(node){detach(node);attach(node);return node->data;}else return NULL;}private:void detach(LRUCacheEntry<K,T>* node){node->prev->next = node->next;node->next->prev = node->prev;}void attach(LRUCacheEntry<K,T>* node){node->next = head->next;node->prev = head;head->next = node;node->next->prev = node;}};int main(){ hash_map<int, int> map; map[9]= 999; cout<<map[9]<<endl; cout<<map[10]<<endl; LRUCache<int, string> lru_cache(100); lru_cache.Put(1, "one"); cout<<lru_cache.Get(1)<<endl; if(lru_cache.Get(2) == "") lru_cache.Put(2, "two"); cout<<lru_cache.Get(2); return 0;}
转自:http://www.cs.uml.edu/~jlu1/doc/codes/lruCache.html
- C++实现一个LRU Cache
- 如何用C++实现一个LRU Cache
- LRU cache的一个简单实现
- 使用C++实现一个LRU cache
- 设计并实现一个LRU Cache
- 如何设计实现一个LRU Cache?
- 设计并实现一个LRU Cache (java)
- java如何实现一个LRU Cache
- 如何用C++实现一个LRU Cache
- 如何设计实现一个LRU Cache?
- 如何用C++实现一个LRU Cache
- 如何用C++实现一个LRU Cache
- 用C++实现一个LRU cache
- 设计一个LRU cache
- LRU cache的实现
- LRU cache实现 (Java)
- [Google] LRU cache实现
- 实现LRU Cache
- windows下Qt5.1 for android开发环境配置
- 淘宝应对"双11"的技术架构分析
- Pig 0.11 里 REGEX_EXTRACT() 中正則表達式的正確用法
- C/C++的20个位运算技巧
- Oracle Flashback table的使用
- C++实现一个LRU Cache
- CDH——hadoop
- 字符串相关
- AspNet_webformaspx页面_Session
- nopCommerce的配置以及汉化
- hdu-2047-阿牛的EOF牛肉串
- declare-styleable:自定义控件的属性
- freopen("*.txt","r",'"stdin"的含义
- host修改