简单LRU算法实现的Cache(C++)

本文介绍了一种基于C++的LRU缓存算法实现,包括插入、获取和删除操作的具体流程。该实现未考虑多线程同步问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此实现不适合多线程!~没有加锁!~

### 使用C++实现LRU缓存淘汰算法 #### 定义与概述 LRU(Least Recently Used),即最近最久未使用,是一种常用的页面置换算法,在计算机操作系统中用于管理内存中的页表项。当物理内存不足时,优先移除那些长时间没有被访问过的数据[^1]。 #### 数据结构的选择 为了高效地实现LRU功能,通常会选择哈希链表作为底层的数据存储方式。这种组合利用了双向链表能够快速插入删除节点以及哈希表提供O(1)复杂度查找的优势[^2]。 #### 关键操作解析 - **获取元素**:如果目标key存在,则将其对应的value返回并将该条目移动到链表头部表示最新访问;若不存在则返回特定值如`-1`。 - **插入新元素**:先判断当前容量是否已满,若是则需先移除尾部结点腾出空间再执行常规插入流程,并更新映射关系使新增加的内容位于列表前端。 - **删除指定位置的元素**:通过hashmap定位待处理对象的位置并调整前后指针指向完成摘除动作。 #### C++代码实例 下面给出一段基于上述思路编写的简化版LRUCache类定义: ```cpp #include <iostream> #include <list> #include <unordered_map> using namespace std; class LRUCache { private: int capacity; list<pair<int, int>> cache; // 存储<key,value>对 unordered_map<int, list<pair<int,int>>::iterator> posMap; // 记录各key对应迭代器 public: LRUCache(int _capacity): capacity(_capacity){} void put(int key, int value){ auto it = posMap.find(key); if(it != posMap.end()){ cache.erase(posMap[key]); posMap.erase(key); } while(cache.size() >= capacity){ pair<int, int> last = cache.back(); cache.pop_back(); posMap.erase(last.first); } cache.push_front(make_pair(key, value)); posMap[key]=cache.begin(); } int get(int key){ auto it = posMap.find(key); if (it == posMap.end()) return -1; int res = (*posMap[key]).second; put(key,res); // 更新此元素至队首 return res; } }; ``` 这段程序展示了如何创建一个简单LRU缓存系统,其中包含了基本的功能函数put和get来分别向缓存中添加或查询项目[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值