Cache généralisé avec priorité et durée de vie
C#
Hard
generics
Tâche «Cache généralisé avec priorité et durée de vie»
Implémentez une classe générique Cache<TKey, TValue> qui stocke des éléments avec une durée de vie donnée (TimeToLive) et une priorité (int). Lors de l'ajout d'un élément, si le cache dépasse la taille maximale, l'élément avec la plus faible priorité est supprimé, et en cas de priorité égale, le plus ancien. Après expiration du TimeToLive, l'élément est considéré comme périmé et n'est pas retourné lors d'une requête. Méthodes : Add(TKey key, TValue value, int priority) — ajoute ou met à jour un élément ; TryGet(TKey key, out TValue value) — retourne true si la clé existe et n'est pas périmée, sinon false ; RemoveExpired() — supprime tous les éléments périmés. Implémentez la sécurité des threads à l'aide de verrous.
Format d\ entrée
Première ligne : taille maximale du cache (int) et durée de vie en secondes (int). Deuxième ligne : nombre de commandes N (int). Ensuite N lignes, chaque commande : 'add clé valeur priorité' ou 'get clé' ou 'remove_expired'.
Format de sortie
Pour chaque commande 'get', affichez la valeur si la clé est trouvée et non périmée, sinon 'null'. Pour 'remove_expired', affichez le nombre d'éléments supprimés. Pour 'add', n'affichez rien.
Exemples
Exemple 1
ENTRÉE
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
SORTIE
10
null
40
1
Exemple 2
ENTRÉE
2 10
6
add x 100 5
add y 200 5
get x
add z 300 5
get y
get z
SORTIE
100
null
300
main.cs