我正在尝试使用纯 STL 实现 LFU(最不常用)缓存(我不想使用 Boost!)。
要求是:
Key
使用like with对任何元素进行关联访问std::map
。- 能够释放最低优先级的项目(使用其
UsesCount
属性)。 - 能够更新
UsesCount
任何项目的优先级 ( )。
问题是:
- 如果我
std::vector
用作项目的容器 (Key
,Value
,UsesCount
),std::map
用作向量的迭代器容器以进行关联访问std::make_heap
,std::push_heap
并且std::pop_heap
用作向量内的优先级队列实现,则映射中的迭代器在堆操作后无效。 - 如果我在以前的配置中使用
std::list
(orstd::map
) 而不是等,则无法编译,因为它们的迭代器不支持算法。std::vector
std::make_heap
- 如果我想使用
std::priority_queue
,我无法更新项目优先级。
问题是:
- 我是否遗漏了一些明显的问题如何解决?
- 您能否以一些满足先前要求的 LFU 缓存的纯 C++/STL 实现为例?
感谢您的见解。