Подтвердить что ты не робот

Какие структуры данных обычно используются для кэшей LRU и быстрого поиска объектов?

Я намеревался реализовать HashTable для быстрого поиска объектов, что важно для моего приложения.

Однако мне не нравится идея сканирования и, возможно, блокировка всей таблицы, чтобы найти, какой объект был в последний раз доступ. Таблицы могут быть довольно большими.

Какие структуры данных обычно используются для преодоления этого?

например. Я думал, что могу бросить объекты в FIFO, а также в кеш, чтобы узнать, сколько лет прошло. Но это не будет поддерживать алгоритм LRU.

Любые идеи? как кальмары делают это?

4b9b3361

Ответ 1

Связанные списки хороши для кэшей LRU. Для индексированных запросов внутри связанного списка (для перемещения записи к последнему используемому концу связанного списка) используйте HashTable. Самая последняя использованная запись всегда будет последней в связанном списке.

Ответ 2

Вы можете найти это article в реализации LRU кэша, используя интересные контейнеры STL (или альтернативу boost::bimap). С помощью STL в основном вы используете комбинацию карты (для быстрого поиска по ключевым словам) и отдельный список ключей или итераторов в эту карту (для упрощения ведения истории доступа).