Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <unordered_map>
- #include <string>
- template<typename T, typename U>
- struct custom_cache{
- struct Node {
- Node() = default;
- Node(T key, U value) : key(key), value(value) {}
- T key;
- U value;
- Node* next = nullptr;
- Node* prev = nullptr;
- };
- std::unordered_map<T, Node*> addresses;
- Node* begin = nullptr;
- Node* end = nullptr;
- U get(T key) {
- if (!begin || !end || addresses.count(key) == 0) {
- return NULL;
- }
- addresses[key]->next->prev = addresses[key]->prev;
- addresses[key]->prev->next = addresses[key]->next;
- begin->next = addresses[key];
- addresses[key]->next = nullptr;
- addresses[key]->prev = begin;
- begin = addresses[key];
- return begin->value;
- }
- void put(T key, U value) {
- if (addresses.count(key) != 0) {
- return;
- }
- auto node = new Node(key, value);
- addresses[key] = node;
- if (!begin || !end) {
- begin = end = node;
- } else {
- node->prev = begin;
- begin->next = node;
- begin = node;
- addresses[end->key] = end->next->prev = nullptr;
- end = end->next;
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement