純粋な 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
(または)を使用すると、反復子が算術をサポートしていないため、コンパイルできません。std::map
std::vector
std::make_heap
- を使用したいのですが
std::priority_queue
、アイテムの優先度を更新する機能がありません。
質問は次のとおりです。
- この問題をどのように解決できるか明らかな何かが欠けていますか?
- 例として、以前の要件を満たす LFU キャッシュの純粋な C++/STL 実装を教えてください。
あなたの洞察に感謝します。