C++怎么实现一个LRU缓存淘汰算法_C++数据结构设计与LRU Cache实现

LRU缓存通过哈希表和双向链表组合实现,O(1)完成查找与顺序维护。1. 哈希表映射key到链表节点;2. 链表头部存最近使用项;3. 访问或插入时更新位置;4. 容量超限时删除尾部节点。

c++怎么实现一个lru缓存淘汰算法_c++数据结构设计与lru cache实现

实现一个LRU(Least Recently Used)缓存淘汰算法,核心在于快速访问数据的同时维护访问顺序。当缓存满时,优先淘汰最久未使用的数据。C++中可以通过结合 哈希表(unordered_map) 和 双向链表(list) 高效实现,达到O(1)的查找、插入和删除效率。

基本思路与数据结构选择

为了同时满足快速查找和顺序管理:

unordered_map:存储键(key)到双向链表节点的映射,实现O(1)查找。 list(双向链表):维护访问顺序,最近使用的放头部,最久未用的在尾部,便于O(1)移动和删除。

每次访问某个key,就将其对应节点移到链表头部;插入新元素时若超出容量,则删除尾部节点。

C++代码实现

以下是一个完整的LRU Cache类实现:

立即学习“C++免费学习笔记(深入)”;

#include #include #include class LRUCache {private:    int capacity;    std::unordered_map<int, std::list<std::pair>::iterator> cache;    std::list<std::pair> used;public:    LRUCache(int cap) : capacity(cap) {}    int get(int key) {        auto it = cache.find(key);        if (it == cache.end()) return -1; // 未命中        // 命中,将该元素移到链表头部        used.splice(used.begin(), used, it->second);        return it->second->second;    }    void put(int key, int value) {        auto it = cache.find(key);        if (it != cache.end()) {            // 已存在,更新值并移到头部            it->second->second = value;            used.splice(used.begin(), used, it->second);            return;        }        // 新插入,检查是否超容        if (cache.size() >= capacity) {            int old_key = used.back().first;            cache.erase(old_key);            used.pop_back();        }        // 插入新节点到链表头部        used.emplace_front(key, value);        cache[key] = used.begin();    }};

关键操作说明

splice 是实现高效移动的核心:

used.splice(used.begin(), used, it->second) 将指定节点直接移到链表头部,不涉及内存分配,时间复杂度为O(1)。 避免了先删除再插入带来的开销。

emplace_front 直接在链表头部构造新节点,比 push_front 更高效。

使用示例

int main() {    LRUCache lru(2);    lru.put(1, 1);    lru.put(2, 2);    std::cout << lru.get(1) << "n"; // 输出 1    lru.put(3, 3);                    // 淘汰 key=2    std::cout << lru.get(2) << "n"; // 输出 -1    return 0;}

基本上就这些。通过哈希表+双向链表的组合,C++能简洁高效地实现LRU缓存,适合面试和实际应用。注意边界处理和STL成员函数的正确使用即可。

以上就是C++怎么实现一个LRU缓存淘汰算法_C++数据结构设计与LRU Cache实现的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1487346.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
c++如何实现一个享元设计模式_c++ Flyweight模式节约内存
上一篇 2025年12月19日 10:36:52
c++如何实现解释器设计模式_c++构建简单的语言解释器
下一篇 2025年12月19日 10:37:00

相关推荐

  • java怎样处理大数据量的集合操作 java高性能处理的编程方法教程

    java怎样处理大数据量的集合操作 java高性能处理的编程方法教程java怎样处理大数据量的集合操作 java高性能处理的编程方法教程java怎样处理大数据量的集合操作 java高性能处理的编程方法教程java怎样处理大数据量的集合操作 java高性能处理的编程方法教程

    选择合适的数据结构是java大数据集合性能优化的基石,因为它直接决定操作的时间与空间复杂度;例如,hashset提供o(1)的查找效率,而arraylist在随机访问时优于linkedlist,但在频繁增删场景下反之;并发场景中应优先使用concurrenthashmap以兼顾线程安全与性能;进一步…

    2026年10月1日 • 用户投稿
    100
  • Perplexity AI 如何提高搜索准确性 参数优化建议

    Perplexity AI 如何提高搜索准确性 参数优化建议Perplexity AI 如何提高搜索准确性 参数优化建议Perplexity AI 如何提高搜索准确性 参数优化建议Perplexity AI 如何提高搜索准确性 参数优化建议

    perplexity ai 提高搜索准确性的关键在于参数的精细调整。首先,明确搜索目标并设置焦点参数,如“定义”或“应用”,使ai优先检索相关内容;其次,通过提供详细背景信息增强上下文理解;第三,调整权重参数,提高权威来源的优先级,如学术期刊赋予更高权重;最后,合理设置惩罚参数,过滤低质量信息,根据…

    2026年10月1日 • 用户投稿
    100
  • 如何用Sublime优化前端代码性能_配合插件检测与压缩JS CSS

    如何用Sublime优化前端代码性能_配合插件检测与压缩JS CSS如何用Sublime优化前端代码性能_配合插件检测与压缩JS CSS如何用Sublime优化前端代码性能_配合插件检测与压缩JS CSS如何用Sublime优化前端代码性能_配合插件检测与压缩JS CSS

    要优化前端代码性能,使用sublime text的核心方法是安装并配置插件以实现代码检测与压缩。1. 首先安装package control插件管理器,通过控制台输入安装代码并重启编辑器;2. 安装代码检测插件如jshint/csslint,用于识别javascript和css中的潜在问题,并通过配…

    2026年10月1日 • 用户投稿
    100
  • 三星开始推送的One UI 8有哪些亮点?值得立刻升级吗?

    三星开始推送的One UI 8有哪些亮点?值得立刻升级吗?三星开始推送的One UI 8有哪些亮点?值得立刻升级吗?三星开始推送的One UI 8有哪些亮点?值得立刻升级吗?三星开始推送的One UI 8有哪些亮点?值得立刻升级吗?

    三星正式开启one ui 8系统更新,首批适配机型为s25系列,后续将陆续覆盖s24系列、z fold 6、z flip 6、多款galaxy平板以及中低端设备。那么,这次的one ui 8带来了哪些新特性?是否值得用户第一时间升级? One UI 8的最大亮点在于AI能力的全面深化。系统融合多模态…

    2026年10月1日 • 用户投稿
    200
  • Project Reactor:在Mono中将Flux聚合为List属性

    本文旨在解决Project Reactor中将Flux数据流聚合为Mono<List>,并将其作为Mono对象内部属性的问题。通过讲解collectList()操作符的应用,结合map操作,演示如何将异步到达的元素收集成列表,并安全地赋值给响应式对象中的列表属性,避免常见的类型不匹配错误…

    2026年10月1日
    100
  • 主板的价格为何差距如此之大?

    高端主板价格高源于更强供电、优质用料、多M.2接口、丰富扩展及附加功能,满足超频与高性能需求,而普通主板侧重基础功能,成本低,选择应根据CPU与实际用途匹配。 主板价格从几百到几千元不等,差距巨大。这背后不是简单的“贵就好”,而是由用料、功能和设计定位共同决定的。 供电与用料:稳定性的核心 主板的供…

    2026年10月1日
    100
  • 谷歌浏览器官方正式版入口 最新Chrome官网登录网址

    谷歌浏览器官方正式版入口是https://www.google.cn/chrome/,该网址提供适用于Windows、Mac、安卓和iOS的正版下载,集成搜索、翻译、同步等功能,并建议用户通过此官网获取最新安全版本。 直达入口一:“☞☞☞☞谷歌浏览器官方正式版入口☜☜☜☜☜点击进入”; 直达入口一:…

    2026年10月1日
    600
  • 微软的Gaming Copilot更像是AI版的查攻略

    微软的Gaming Copilot更像是AI版的查攻略微软的Gaming Copilot更像是AI版的查攻略微软的Gaming Copilot更像是AI版的查攻略微软的Gaming Copilot更像是AI版的查攻略

    微软的copilot ai从下周开始就要登陆windows pc上的xbox游戏栏(xbox game bar)。这项名为“游戏copilot”的新功能刚在上个月公布,截至周四,它已开始在pc上进行全面beta测试,并将于10月登陆xbox移动app。顾名思义,它是copilot的游戏专属版本,微软…

    2026年10月1日 • 用户投稿
    800
  • 拼多多店铺怎么查询商品?拼多多店铺怎么查询商品价格

    拼多多店铺怎么查询商品?拼多多店铺怎么查询商品价格拼多多店铺怎么查询商品?拼多多店铺怎么查询商品价格拼多多店铺怎么查询商品?拼多多店铺怎么查询商品价格拼多多店铺怎么查询商品?拼多多店铺怎么查询商品价格

    答案:可通过店铺内搜索、平台搜索筛选店铺、查看商品详情页获取价格。进入目标店铺,使用“店内搜”输入关键词查找;或在拼多多主搜索框输入店铺名,进入后浏览商品列表;点击商品进入详情页可查看当前售价、促销价及划线价等详细信息。 如果您想在拼多多店铺中查找特定商品或了解其价格信息,可以通过平台内的多种方式进…

    2026年10月1日 • 用户投稿
    100
  • Claude可以分析股票走势图吗 Claude金融图表识别技术解析

    Claude可以分析股票走势图吗 Claude金融图表识别技术解析Claude可以分析股票走势图吗 Claude金融图表识别技术解析Claude可以分析股票走势图吗 Claude金融图表识别技术解析Claude可以分析股票走势图吗 Claude金融图表识别技术解析

    许多用户对于先进的人工智能模型Claude是否具备分析股票走势图等复杂金融图表的能力感到好奇。本文将深入探讨这一问题,详细解析Claude在金融图表识别方面的技术能力,并提供清晰的操作流程讲解,帮助用户了解如何利用Claude进行图表分析,以及在使用过程中需要注意的关键事项。 ☞☞☞AI 智能聊天,…

    2026年10月1日 • 用户投稿
    200
  • 使用 Java 8 Lambdas 和 Map 重构 If 语句

    使用 Java 8 Lambdas 和 Map 重构 If 语句使用 Java 8 Lambdas 和 Map 重构 If 语句使用 Java 8 Lambdas 和 Map 重构 If 语句使用 Java 8 Lambdas 和 Map 重构 If 语句

    本文介绍如何利用 Java 8 的 Lambda 表达式和 Map 数据结构,优雅地重构包含大量 if 语句的代码,特别是针对对象字段的非空校验场景。通过将校验逻辑与字段关联,可以简化代码结构,提高代码的可读性和可维护性,并方便后续扩展。 使用 Map 和 Lambda 重构 If 语句 在处理对象…

    2026年10月1日 • 用户投稿
    100
  • win10系统时间不准怎么办_Win10系统时间自动同步校准设置

    win10系统时间不准怎么办_Win10系统时间自动同步校准设置win10系统时间不准怎么办_Win10系统时间自动同步校准设置win10系统时间不准怎么办_Win10系统时间自动同步校准设置win10系统时间不准怎么办_Win10系统时间自动同步校准设置

    首先检查时区设置并开启自动时间同步,若无效则更换时间服务器、重启Windows Time服务,或通过命令行重置服务,最后排查CMOS电池问题以解决Windows 10时间不准。 如果您发现Windows 10系统显示的时间不准确,可能是由于时区设置错误、网络时间同步功能未启用或Windows Tim…

    2026年10月1日 • 用户投稿
    300
  • 拼多多鞋子质量问题可以举报商家吗安全吗?拼多多买的鞋子有质量问题但是穿过可以退换吗

    拼多多鞋子质量问题可以举报商家吗安全吗?拼多多买的鞋子有质量问题但是穿过可以退换吗拼多多鞋子质量问题可以举报商家吗安全吗?拼多多买的鞋子有质量问题但是穿过可以退换吗拼多多鞋子质量问题可以举报商家吗安全吗?拼多多买的鞋子有质量问题但是穿过可以退换吗拼多多鞋子质量问题可以举报商家吗安全吗?拼多多买的鞋子有质量问题但是穿过可以退换吗

    答案:可退换货并举报商家。在拼多多购买的鞋子若存在质量问题,即使穿过也可申请售后,需提供开箱视频、瑕疵照片等证据,选择“商品质量问题”发起退货退款或换货,商家拒绝可请求平台介入;同时可在订单页举报商家,提交证据链;若平台处理不力,可通过12315小程序投诉,填写商家信息并引用消法第五十五条要求退一赔…

    2026年10月1日 • 用户投稿
    100
  • 微信注销需要身份证验证吗_微信注销身份验证要求详解

    微信注销需要身份证验证吗_微信注销身份验证要求详解微信注销需要身份证验证吗_微信注销身份验证要求详解微信注销需要身份证验证吗_微信注销身份验证要求详解微信注销需要身份证验证吗_微信注销身份验证要求详解

    注销微信账号需完成身份验证,包括人脸识别与身份证信息比对、原绑定手机号验证码确认,异常情况须通过客服提交身份证材料及手持视频。 如果您准备注销微信账号,但不确定是否需要身份验证,则需要注意当前流程已包含严格的认证环节。为确保账号安全并符合监管要求,注销过程必须完成身份核验。以下是具体操作说明: 本文…

    2026年10月1日 • 用户投稿
    100
  • 京东免运费怎么设置的?京东如何设置免运费

    京东免运费怎么设置的?京东如何设置免运费京东免运费怎么设置的?京东如何设置免运费京东免运费怎么设置的?京东如何设置免运费京东免运费怎么设置的?京东如何设置免运费

    答案:满足订单金额门槛、开通PLUS会员或使用运费券可免运费。具体包括京东自营满59元包邮,PLUS会员享无限免邮,第三方店铺满59元包邮,以及领取运费券或购买包邮商品等方式实现免运费。 如果您在京东购物时希望免除运费,可以通过满足特定条件或使用相关服务来实现。以下是设置免运费的详细步骤: 本文运行…

    2026年10月1日 • 用户投稿
    100
  • windows怎么修复引导_系统启动引导项修复命令教程

    windows怎么修复引导_系统启动引导项修复命令教程windows怎么修复引导_系统启动引导项修复命令教程windows怎么修复引导_系统启动引导项修复命令教程windows怎么修复引导_系统启动引导项修复命令教程

    无法进入Windows系统时,可依次尝试自动修复、命令行重建BCD、手动添加引导项或使用第三方工具修复。首先通过强制关机三次进入WinRE,使用启动修复;若无效,在命令提示符下运行bootrec命令扫描并修复引导分区;当BCD缺失时,用bcdedit命令手动创建引导条目;最后可通过微PE等工具盘进入…

    2026年10月1日 • 用户投稿
    200
  • AI Overviews能否优化广告投放 AI Overviews营销策略智能调整方案

    AI Overviews能否优化广告投放 AI Overviews营销策略智能调整方案AI Overviews能否优化广告投放 AI Overviews营销策略智能调整方案AI Overviews能否优化广告投放 AI Overviews营销策略智能调整方案AI Overviews能否优化广告投放 AI Overviews营销策略智能调整方案

    随着人工智能技术的发展,AI Overviews(人工智能摘要)正在重塑信息检索的方式,它同样为广告投放优化提供了新的可能性。本文将深入探讨如何利用AI Overviews洞察市场趋势与用户意图,并详细讲解一套智能调整营销策略的实践方案,帮助您学习如何将这些洞察转化为具体的广告优化操作,从而提升投放…

    2026年10月1日 • 用户投稿
    100
  • NVIDIA、Intel史诗级合作 AMD承压:真正竞争优势将消失

    NVIDIA、Intel史诗级合作 AMD承压:真正竞争优势将消失NVIDIA、Intel史诗级合作 AMD承压:真正竞争优势将消失NVIDIA、Intel史诗级合作 AMD承压:真正竞争优势将消失NVIDIA、Intel史诗级合作 AMD承压:真正竞争优势将消失

    9月21日消息,nvidia前两天抛出一个震撼业界的消息:将投资50亿美元入股intel,不仅成为后者的最大股东之一,更将与intel展开深度产品合作。 根据协议,NVIDIA将定制基于x86架构的Intel CPU,用于集成至其AI基础设施平台中,此时Intel扮演供应商角色。与此同时,Intel…

    2026年10月1日 • 用户投稿
    200
  • 真要来了?《古墓丽影:十周年纪念版》奖杯列表泄露

    随着《古墓丽影:十周年纪念版》的完整ps4奖杯列表近日在网络曝光,这款经典游戏似乎即将登陆现代游戏平台。该消息最初由reddit网友发现,泄露的26个奖杯(从铜杯到白金杯)涵盖了完成故事章节、收集文物以及解锁额外服装等全部内容。 此次发现引发了关于水晶动力正在开发《古墓丽影:传奇三部曲重制版》的猜测…

    2026年10月1日
    200
  • 夸克浏览器网盘的视频怎么倍速播放_夸克浏览器网盘视频播放速度调节方法

    夸克浏览器网盘的视频怎么倍速播放_夸克浏览器网盘视频播放速度调节方法夸克浏览器网盘的视频怎么倍速播放_夸克浏览器网盘视频播放速度调节方法夸克浏览器网盘的视频怎么倍速播放_夸克浏览器网盘视频播放速度调节方法夸克浏览器网盘的视频怎么倍速播放_夸克浏览器网盘视频播放速度调节方法

    首先将夸克浏览器UA设置为PC版,再登录百度网盘播放视频,通过播放器控件或播放助手功能选择倍速选项即可实现倍速播放。 如果您尝试在夸克浏览器中播放百度网盘的视频,但发现无法调整播放速度,则可能是由于浏览器设置未正确配置或功能未被激活。以下是解决此问题的具体步骤: 本文运行环境:iPhone 15 P…

    2026年10月1日 • 用户投稿
    300

发表回复

登录后才能评论
关注微信