Advertisement
Guest User

Custom cache

a guest
Apr 4th, 2020
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. #include <iostream>
  2. #include <unordered_map>
  3. #include <string>
  4.  
  5. template<typename T, typename U>
  6. struct custom_cache{
  7.     struct Node {
  8.         Node() = default;
  9.         Node(T key, U value) : key(key), value(value) {}
  10.         T key;
  11.         U value;
  12.         Node* next = nullptr;
  13.         Node* prev = nullptr;
  14.     };
  15.  
  16.     std::unordered_map<T, Node*> addresses;
  17.     Node* begin = nullptr;
  18.     Node* end = nullptr;
  19.  
  20.     U get(T key) {
  21.         if (!begin || !end || addresses.count(key) == 0) {
  22.             return NULL;
  23.         }
  24.         addresses[key]->next->prev = addresses[key]->prev;
  25.         addresses[key]->prev->next = addresses[key]->next;
  26.         begin->next = addresses[key];
  27.         addresses[key]->next = nullptr;
  28.         addresses[key]->prev = begin;
  29.         begin = addresses[key];
  30.         return begin->value;
  31.     }
  32.  
  33.     void put(T key, U value) {
  34.         if (addresses.count(key) != 0) {
  35.             return;
  36.         }
  37.         auto node = new Node(key, value);
  38.         addresses[key] = node;
  39.         if (!begin || !end) {
  40.             begin = end = node;
  41.         } else {
  42.             node->prev = begin;
  43.             begin->next = node;
  44.             begin = node;
  45.             addresses[end->key] = end->next->prev = nullptr;
  46.             end = end->next;
  47.         }
  48.     }
  49. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement