在现代软件开发中,缓存是提升系统性能的关键技术之一。而LRU(Least Recently Used,最近最少使用)是一种广泛使用的缓存淘汰策略。本文将带你从零开始,用C++语言实现一个高效的LRU缓存,即使你是编程小白,也能轻松理解!
LRU缓存的核心思想是:当缓存空间已满,需要腾出位置时,优先淘汰“最近最少被访问”的数据。例如,你有一个容量为3的缓存,依次存入A、B、C,然后访问B,再插入D,此时A就是最久未被使用的,会被移除。
C++提供了对内存和数据结构的精细控制,非常适合实现高性能缓存。通过结合std::unordered_map(哈希表)和std::list(双向链表),我们可以实现O(1)时间复杂度的get和put操作。
std::list维护访问顺序:链表头部是最新的,尾部是最旧的。std::unordered_map存储键到链表节点的映射,实现快速查找。下面是一个完整的、可直接编译运行的LRU缓存实现:
#include <iostream>#include <unordered_map>#include <list>class LRUCache {private: int capacity; // 双向链表:存储 {key, value} std::list<std::pair<int, int>> cache; // 哈希表:key -> iterator of list std::unordered_map<int, std::list<std::pair<int, int>>::iterator> map;public: LRUCache(int capacity) : capacity(capacity) {} int get(int key) { auto it = map.find(key); if (it == map.end()) { return -1; // 未找到 } // 将访问的节点移到头部 cache.splice(cache.begin(), cache, it->second); return it->second->second; } void put(int key, int value) { auto it = map.find(key); if (it != map.end()) { // 更新值并移到头部 it->second->second = value; cache.splice(cache.begin(), cache, it->second); } else { // 插入新节点 if (cache.size() == capacity) { // 缓存已满,删除尾部(最久未使用) auto last = cache.back(); map.erase(last.first); cache.pop_back(); } // 插入到头部 cache.emplace_front(key, value); map[key] = cache.begin(); } }};// 简单测试int main() { LRUCache lru(2); lru.put(1, 1); lru.put(2, 2); std::cout << lru.get(1) << std::endl; // 输出 1 lru.put(3, 3); // 淘汰 key=2 std::cout << lru.get(2) << std::endl; // 输出 -1 lru.put(4, 4); // 淘汰 key=1 std::cout << lru.get(1) << std::endl; // 输出 -1 std::cout << lru.get(3) << std::endl; // 输出 3 std::cout << lru.get(4) << std::endl; // 输出 4 return 0;} 1. splice操作:这是std::list的一个高效方法,可以在O(1)时间内将一个节点移动到另一个位置,无需复制数据。
2. 迭代器稳定性:在std::list中,插入或删除其他节点不会使现有迭代器失效,这使得我们可以安全地在map中存储迭代器。
3. 时间复杂度:get和put操作均为O(1),非常适合高频访问场景。
LRU缓存广泛应用于数据库查询缓存、Web服务器页面缓存、操作系统内存管理等场景。掌握C++ LRU缓存实现不仅能提升你的算法能力,还能为实际项目提供高性能解决方案。
通过本文,你已经学会了如何用C++实现一个高效的LRU缓存。我们结合了哈希表和双向链表的优势,实现了O(1)的访问和更新操作。希望这个教程能帮助你深入理解LRU缓存算法和C++缓存机制。动手试试吧,你也可以构建自己的高性能缓存系统!
关键词:C++ LRU缓存实现, LRU缓存算法, C++缓存机制, 最近最少使用缓存
本文由主机测评网于2025-12-07发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025124044.html