使用C ++的最近最少使用的缓存
我正在尝试使用C ++实现LRU Cache。我想知道实现它们的最佳设计是什么。我知道LRU应该提供find(),添加一个元素并删除一个元素。删除应删除LRU元素。什么是最好的ADT来实现这一点
例如:如果我使用带有元素的映射作为值和时间计数器作为键我可以在O(logn)时间搜索,Inserting是O(n),删除是O(logn)。
没有找到相关结果
已邀请:
7 个回复
嗜蒂谷尘旱
,
或
通常是高质量的实施,有些应该可供您使用。他们还为哈希冲突处理分配额外的节点,您可能更喜欢其他类型的哈希映射,查看维基百科关于该主题的文章,并阅读各种实现技术的特征。 继续,有(明显的)线程支持。如果你不需要线程支持,那么没关系,如果你这样做,它会有点复杂: 正如我所说,在这样的结构上几乎没有
操作,因此您不需要区分读/写访问 内部锁定没问题,但您可能会发现它对您的使用不起作用。内部锁定的问题在于它不支持“事务”的概念,因为它放弃了每次调用之间的锁定。如果是这种情况,请将对象转换为互斥体并提供
方法(在调试中,您可以断言,而不是在每个方法的入口点处进行锁定) (在锁定策略中)存在重入问题,即从同一个线程中“重新锁定”互斥锁的能力,请查看Boost.Thread以获取有关各种锁和互斥锁的更多信息 最后,还有错误报告的问题。由于预计缓存可能无法检索您输入的数据,因此我会考虑使用“不良品味”的例外情况。考虑指针(
)或Boost.Optional(
)。我更喜欢Boost.Optional,因为它的语义清晰。
断跑胺弄萎
佬棠
)。
炬卤遁蝎变
樊熄忙暖
缉康怪
委婪绷冗诉