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