利用c++设计实现一个LRU缓存

本文介绍了如何利用C++设计一个LRU缓存,遵循最近最少使用(LRU)策略。主要方法包括getVal()用于获取键值对中的值,setVal()用于向缓存中插入键值对。设计中结合了hash_map和双向链表,以方便高效地进行数据查找、删除和更新。
摘要由CSDN通过智能技术生成

利用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))
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值