我正在尝试使用纯 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::vectorstd::make_heap - 如果我想使用
std::priority_queue,我无法更新项目优先级。
问题是:
- 我是否遗漏了一些明显的问题如何解决?
- 您能否以一些满足先前要求的 LFU 缓存的纯 C++/STL 实现为例?
感谢您的见解。