利用c++设计实现一个LRU缓存
LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”
主要提供两个对外的接口,一个是getVal(key),根据key在缓存找对应的val值;一个是setVal(key,val)向lru缓存中插入一个val.
设计思具体是利用hash_map保存key和对应的val值,因为要考虑删除最久未使用的key和把当前使用的key置换成最新的key,因此val的设计需要是一个结构体,然后还要准备一个双向链表保存结构体,便于删除和置换;
具体代码如下:
#include <vector>
#include <unordered_map>
#include <iostream>
using namespace std;
struct DNode{
/* data */
DNode *_pre,*_next;
int _key,_val;
DNode(int k,int v) : _pre(nullptr),_next(nullptr),_key(k),_val(v) {}
};
class LRUCache {
public:
explicit LRUCache(int n) : _n(n) {}
//获取值
int getVal(int key) {
if(_mp.count(key)) {
setVal(key,_mp[key]->_val);
return _mp[key]->_val;
}else
return -1;
}
void setVal(int key,int val) {
if(_mp.count(key))