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缓存[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C语言,删除数组中的重复数字然后输出

从c中的struct数组中删除重复名称[重复]

C中的“静态”是啥意思?` [重复]

C/C++ 中的默认 int 主要参数 [重复]

C中的计时函数[重复]

c#.net中的bool和boolean有啥不同[重复]