Обобщенный кэш с приоритетом и временем жизни
C#
Сложный
generics
Задача «Обобщенный кэш с приоритетом и временем жизни»
Реализуйте обобщенный класс Cache<TKey, TValue>, который хранит элементы с заданным временем жизни (TimeToLive) и приоритетом (int). При добавлении элемента, если кэш превышает максимальный размер, удаляется элемент с наименьшим приоритетом, а при равном приоритете — самый старый. По истечении TimeToLive элемент считается просроченным и не возвращается при запросе. Методы: Add(TKey key, TValue value, int priority) — добавляет или обновляет элемент; TryGet(TKey key, out TValue value) — возвращает true, если ключ существует и не просрочен, иначе false; RemoveExpired() — удаляет все просроченные элементы. Реализуйте потокобезопасность с помощью блокировок.
Формат ввода
Первая строка: максимальный размер кэша (int) и время жизни в секундах (int). Вторая строка: количество команд N (int). Далее N строк, каждая команда: 'add ключ значение приоритет' или 'get ключ' или 'remove_expired'.
Формат вывода
Для каждой команды 'get' выведите значение, если ключ найден и не просрочен, иначе 'null'. Для 'remove_expired' выведите количество удалённых элементов. Для 'add' ничего не выводите.
Примеры
Пример 1
ВВОД
3 5
8
add a 10 1
add b 20 2
get a
add c 30 3
add d 40 1
get b
get d
remove_expired
ВЫВОД
10
null
40
1
Пример 2
ВВОД
2 10
6
add x 100 5
add y 200 5
get x
add z 300 5
get y
get z
ВЫВОД
100
null
300
main.cs