LRU算法 c++手写 map
来源:互联网 发布:97网络含义是什么 编辑:程序博客网 时间:2024/06/05 16:37
#include<iostream>using namespace std;#include<queue>#include<map>#include<string.h>struct cachenode{ int key; int value; cachenode *pre; cachenode *next; cachenode(int key_t,int value_t) { key=key_t; value=value_t; pre=NULL; next=NULL; }};class lrucache{private: int lrucache_size; cachenode *head; cachenode *tail; map<int,cachenode*>mp;public: lrucache(int size_tt) { lrucache_size=size_tt; head=NULL; tail=NULL; } void set_data(int key,int value) { map<int,cachenode*>::iterator it=mp.find(key); if(it!=mp.end()) { cachenode *temp=it->second; temp->value=value; remove_data(temp); set_head(temp); } else { cachenode *new_node=new cachenode(key,value); if(mp.size()>=lrucache_size) { map<int,cachenode*>::iterator it=mp.find(tail->key); remove_data(tail); mp.erase(it); } set_head(new_node); mp[key]=new_node; } } int get_data(int key) { map<int,cachenode*>::iterator it=mp.find(key); if(it!=mp.end()) { cachenode *temp=it->second; remove_data(temp); set_head(temp); return temp->value; } else return -1; } void remove_data(cachenode *node) { if(node->pre!=NULL) node->pre->next=node->next; else head=node->next; if(node->next!=NULL) { node->next->pre=node->pre; } else { tail=node->pre; } } void set_head(cachenode *node) { node->next=head; node->pre=NULL; if(head!=NULL) { head->pre=node; } head=node; if(tail==NULL) tail=head; //head=node; }};int main(){ lrucache *t_lrucache; t_lrucache=new lrucache(2); t_lrucache->set_data(2,1); t_lrucache->set_data(3,4); cout<<t_lrucache->get_data(3)<<endl; //cout<<"first"<<endl; t_lrucache->set_data(5,7); //cout<<"end"<<endl; cout<<t_lrucache->get_data(2)<<endl; cout<<t_lrucache->get_data(5)<<endl;}
阅读全文
0 0
- LRU算法 c++手写 map
- LRU算法总结及其C算法实现
- C语言实现LRU页面置换算法
- LRU算法
- LRU算法
- LRU算法
- LRU算法
- LRU 算法
- LRU算法
- LRU算法
- LRU算法
- LRU算法
- LRU算法
- lru算法
- LRU 算法
- LRU算法
- LRU算法
- Lru算法
- 正则获取字符串中图片路径
- winform与unity之间的Socket通讯
- 设计模式三连发
- HADOOP集群搭建实战(HA高可靠性模式)
- (1)Python笔记:抓取CSDN博文
- LRU算法 c++手写 map
- jQuery实现input框输入值动态搜索
- 洛谷的文件夹(树形结构+DFS+字符串哈希)
- Android recycleview 多布局
- 最令人头疼的 Python 问题
- Django vs SQLAlchemy:哪个 Python ORM 更好
- 2017年中国程序员调查分析:大数据就业前景广阔
- IntelliJ IDEA 学习笔记
- Andorid架构之BaseActivity