C ++中的LRU缓存[重复]
Posted
技术标签:
【中文标题】C ++中的LRU缓存[重复]【英文标题】:LRU cache in C++ [duplicate] 【发布时间】:2012-10-27 23:04:20 【问题描述】:可能重复:LRU cache design
我在一次编程面试中得到了这个问题。随意考虑如何回答。
您将如何在 C++ 中实现 LRU(最近最少更新)缓存?基本上,缓存最多可以容纳N
个项目。如果插入了一个新项目并且缓存中的项目数小于N
,则它只是插入。但是如果插入了一个新项目并且缓存中的项目数已经是N
,那么最近最少使用的项目应该从缓存中删除。
想想您的每项操作需要多少运行时间。
【问题讨论】:
见***.com/questions/2504178/lru-cache-design。 【参考方案1】:我将拥有存储上次访问时间的缓存元素的成员。当元素被访问(成员函数被调用)时,访问时间成员被更新。当缓存已满时,访问时间最短的元素将被删除。
其他选项是在intrusive list 中缓存元素。当某些东西被访问并且不在列表顶部时,它会出现在列表顶部。当缓存已满时,列表的底部元素被擦除。每次访问都需要做更多工作,但可以更快地找到受害者。
基本想法是不要为此类任务提供典型的地图和列表,这些会分散您的记忆。我的算法将缓存始终保持在一个位置。
【讨论】:
当然,这应该可行,但您必须遍历所有元素才能找到访问时间最短的元素。 好的,我添加了其他算法,在缓存元素非常多的情况下可能有意义。以上是关于C ++中的LRU缓存[重复]的主要内容,如果未能解决你的问题,请参考以下文章