純粋な STL を使用して LFU (最も頻繁に使用されない) キャッシュを実装しようとしています (Boost は使用したくありません!)。
要件は次のとおりです。
Keylike withを使用した任意の要素への連想アクセスstd::map。- 最も優先度の低いアイテムを解放する能力 (その
UsesCount属性を使用)。 UsesCount任意の項目の優先度 ( ) を更新する機能。
問題は次のとおりです。
std::vector項目 (Key、Value、UsesCount)std::mapのコンテナーとして、連想アクセス用のベクターへの反復子のコンテナーとしてstd::make_heap、std::push_heapおよびstd::pop_heapをベクター内の優先度キューの実装として使用すると、マップ内の反復子はヒープ操作後に無効になります。- 以前の構成の代わりに
std::list(または)を使用すると、反復子が算術をサポートしていないため、コンパイルできません。std::mapstd::vectorstd::make_heap - を使用したいのですが
std::priority_queue、アイテムの優先度を更新する機能がありません。
質問は次のとおりです。
- この問題をどのように解決できるか明らかな何かが欠けていますか?
- 例として、以前の要件を満たす LFU キャッシュの純粋な C++/STL 実装を教えてください。
あなたの洞察に感謝します。