C++实现LRU缓存

本文介绍了如何使用C++设计LRU缓存结构,通过结合链表和哈希表实现O(1)的get和set操作。当缓存满时,会淘汰最久未使用的数据。具体实现包括使用链表存储键值对,哈希表维护键与节点位置的关系,确保高效查找和更新。
摘要由CSDN通过智能技术生成

链接:设计LRU缓存结构__牛客网
来源:牛客网

设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为 capacity ,操作次数是 n ,并有如下功能:
1. Solution(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存
2. get(key):如果关键字 key 存在于缓存中,则返回key对应的value值,否则返回 -1 。
3. set(key, value):将记录(key, value)插入该结构,如果关键字 key 已经存在,则变更其数据值 value,如果不存在,则向缓存中插入该组 key-value ,如果key-value的数量超过capacity,弹出最久未使用的key-value

要求:函数set和get必须以O(1)的方式运行

第一次遇到这道题竟然是在笔试中,当时真的不太清楚要设计一个怎样的数据结构!

其实是这样的:

LRU算法简单说就是,缓存大小有限,超过缓存大小时去掉最久远没有使用的数据,如果使用了数据,当前使用的数据被认为最近一次使用的。

我们要存储的数据类型是键值对,用一个链表存储࿰

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南无故人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值