c++lru调度算法
时间: 2023-12-22 07:27:54 浏览: 92
LRU(Least Recently Used)是一种常见的页面置换算法,也可以用于缓存淘汰策略。在LRU算法中,缓存满时,会将最近最少使用的数据淘汰掉,以腾出空间存储新的数据。下面是一个C++实现的LRU缓存类的示例代码:
```c++
#include <iostream>
#include <unordered_map>
#include <list>
using namespace std;
class LRUCache {
private:
int capacity;
unordered_map<int, pair<int, list<int>::iterator>> cache;
list<int> lru;
public:
LRUCache(int capacity) {
this->capacity = capacity;
}
int get(int key) {
if (cache.find(key) == cache.end()) {
return -1;
}
// 将访问的元素移到链表头部
lru.erase(cache[key].second);
lru.push_front(key);
cache[key].second = lru.begin();
return cache[key].first;
}
void put(int key, int value) {
if (cache.find(key) != cache.end()) {
// 更新元素的值,并将其移到链表头部
lru.erase(cache[key].second);
lru.push_front(key);
cache[key] = {value, lru.begin()};
} else {
if (cache.size() == capacity) {
// 淘汰最近最少使用的元素
cache.erase(lru.back());
lru.pop_back();
}
// 将新元素插入链表头部
lru.push_front(key);
cache[key] = {value, lru.begin()};
}
}
void print() {
for (auto it = lru.begin(); it != lru.end(); ++it) {
cout << *it << " ";
}
cout << endl;
}
};
```
在上面的代码中,LRUCache类包含三个私有成员变量:capacity表示缓存的容量,cache是一个哈希表,用于存储键值对和对应的链表迭代器,lru是一个双向链表,用于存储键的访问顺序。LRUCache类提供了get和put两个公有方法,分别用于获取和插入元素。在get方法中,如果元素存在,则将其移到链表头部,并返回其值;否则返回-1。在put方法中,如果元素已存在,则更新其值,并将其移到链表头部;否则,如果缓存已满,则淘汰最近最少使用的元素,并将新元素插入链表头部。LRUCache类还提供了一个print方法,用于打印当前缓存中的所有键。
阅读全文