C ++中的LRU缓存

时间:2012-10-27 23:04:20

标签: c++ caching data-structures lru

  

可能重复:
  LRU cache design

我在编程面试中得到了这个问题。随意考虑如何回答它。

如何在C ++中实现LRU(最近更新的)缓存?基本上,缓存最多可以容纳N个项目。如果插入了新项目并且缓存中的项目数小于N,则只插入它。但是,如果插入了一个新项目并且缓存中的项目数量已经是N,则应该从缓存中删除最近最少使用的项目。

考虑每次操作需要的运行时间。

1 个答案:

答案 0 :(得分:1)

我将拥有存储上次访问时间的缓存元素的成员。访问元素(调用成员函数)时,将更新访问时间成员。当缓存变满时,将删除访问时间最短的元素。

其他选项是在intrusive list中包含缓存元素。当访问某些内容并且不在列表顶部时,它会出现在列表顶部。当缓存已满时,列表的底部元素将被删除。每次访问都需要做更多的工作,但受害者可以更快找到。

基本的想法是没有这些任务的典型地图和列表,这些会破坏你的记忆。我的算法将缓存保持在一个地方。