利用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))
updateExisted(key,val);
else {

本文介绍了如何利用C++设计一个LRU缓存,遵循最近最少使用(LRU)策略。主要方法包括getVal()用于获取键值对中的值,setVal()用于向缓存中插入键值对。设计中结合了hash_map和双向链表,以方便高效地进行数据查找、删除和更新。
最低0.47元/天 解锁文章
5671

被折叠的 条评论
为什么被折叠?



