51 lines
1.2 KiB
C++
51 lines
1.2 KiB
C++
|
#ifndef S0146_LRU_CACHE_HPP
|
|||
|
#define S0146_LRU_CACHE_HPP
|
|||
|
|
|||
|
#include <cstdlib>
|
|||
|
#include <unordered_map>
|
|||
|
|
|||
|
class LRUCache {
|
|||
|
public:
|
|||
|
/**
|
|||
|
* @brief Least Recently Used Cache
|
|||
|
*
|
|||
|
* 这是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰
|
|||
|
*
|
|||
|
* @param capacity 容量,这是一个正整数
|
|||
|
*/
|
|||
|
LRUCache(int capacity);
|
|||
|
/**
|
|||
|
* @brief 读取数据
|
|||
|
*
|
|||
|
* @param key 数据对应的键值
|
|||
|
* @return 数据的值
|
|||
|
*/
|
|||
|
int get(int key);
|
|||
|
/**
|
|||
|
* @brief 放入对应的数据
|
|||
|
*
|
|||
|
* @param key 数据对应的键值
|
|||
|
* @param value 数据对应的值
|
|||
|
*/
|
|||
|
void put(int key, int value);
|
|||
|
|
|||
|
private:
|
|||
|
struct CacheNode {
|
|||
|
int key;
|
|||
|
int value;
|
|||
|
CacheNode *next;
|
|||
|
CacheNode *prev;
|
|||
|
CacheNode(int key, int value)
|
|||
|
: key(key), value(value), next(nullptr), prev(nullptr){};
|
|||
|
CacheNode(int key, int value, CacheNode *next, CacheNode *prev)
|
|||
|
: key(key), value(value), next(next), prev(prev){};
|
|||
|
};
|
|||
|
CacheNode *head;
|
|||
|
CacheNode *tail;
|
|||
|
int capacity;
|
|||
|
std::unordered_map<int, CacheNode *> map; // 键值是 key,值是该节点的指针
|
|||
|
void moveToHead(CacheNode *node); // 将节点移动到头部
|
|||
|
};
|
|||
|
|
|||
|
#endif
|