用C++实现一个LRU cache
来源:互联网 发布:系统交互流程图软件 编辑:程序博客网 时间:2024/06/04 18:58
#include <boost/unordered_map.hpp>#define DEFAULT_LRU_CAPACITY 10000template<class K, class V>class LRUCache{struct Node{K key;V value;Node *prev, *next;Node(const K& key, const V& value): key(key), value(value){prev = next = NULL;}Node(){}};public:LRUCache(std::size_t size = DEFAULT_LRU_CAPACITY): size_(size){//Mutex::Lock autolock(lock);assert(size > 0);head_ = new Node;head_->next = head_;head_->prev = head_;//circle}int get(const K& k, V& v){//Mutex::Lock autolock(lock);boost::unordered_map<K, Node*>::const_iterator iter = elems_.find(k);if (iter == elems_.end()) {cout << "get, cannot find:" << k << endl;return -1; //can't find}Node* node = iter->second;if (head_->next != node) {detatch(node);attach(node);}v = node->value;return 0;}int put(const K key, const V& value){//Mutex::Lock autolock(lock);if (elems_.find(key) != elems_.end()) {return -1; //not unique}if (elems_.size() >= size_){drop_oldest();}Node* node = new Node(key, value);elems_[key] = node;attach(node);return 0;}void dump(){std::cout << "dump-----------------------" << endl;Node* node = head_->next;while (node && node != head_) {std::cout << "------------\t" << node->key << "\t" << node->value << endl;node = node->next;}}protected:void detatch(Node* node){node->prev->next = node->next;node->next->prev = node->prev;}void attach(Node* node){node->next = head_->next;node->prev = head_;head_->next->prev = node;head_->next = node;}void drop_oldest(){Node* node = head_->prev;// last nodeassert(node != head_);// not emptyif (node == head_) {return;// empty}K key = node->key;elems_.erase(key);head_->prev = node->prev;node->prev->next = head_;delete node;}protected:boost::unordered_map<K, Node*> elems_;Node* head_;std::size_t size_;//Mutex lock;};
阅读全文
0 0
- 用C++实现一个LRU cache
- 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
- 设计一个LRU cache
- 用LinkedHashMap实现的简单LRU Cache
- LRU cache的实现
- LRU cache实现 (Java)
- [Google] LRU cache实现
- You need to use a Theme.AppCompat theme (or descendant) with this activity
- Android_自定义描述进度的View
- C#:ListView控件如何实现点击列表头进行排序
- git学习笔记
- webrtc的base库在windows平台的编译
- 用C++实现一个LRU cache
- 88. Merge Sorted Array
- redis基本操作
- Codeforces 888A Local Extrema
- JDK源码中使用的设计模式-总结
- 【tensorflow 学习】tf.get_variable()和tf.Variable()的区别
- 辗转相除法求两个整数的最大公约数
- 二叉树的建立,前序,中序,后序遍历
- Android开发中的代码混淆