在上述的代码中加上统计页面置换次数
时间: 2023-09-01 08:13:41 浏览: 175
好的,可以在LFUCache类中加入一个成员变量swapCount来记录页面置换次数,在淘汰缓存项时将其加一即可。修改后的代码如下:
```
class LFUCache {
private:
int capacity;
int size;
int minFreq;
unordered_map<int, pair<int, int>> cache;
unordered_map<int, list<int>::iterator> freqMap;
unordered_map<int, list<int>> freqToList;
int swapCount; // 新增页面置换次数
public:
LFUCache(int capacity) {
this->capacity = capacity;
size = 0;
minFreq = 0;
swapCount = 0; // 初始化页面置换次数为0
}
int get(int key) {
if (cache.count(key) == 0) {
return -1;
}
int val = cache[key].first;
int freq = cache[key].second;
freqToList[freq].erase(freqMap[key]);
freqMap.erase(key);
freq++;
cache[key] = {val, freq};
freqToList[freq].push_back(key);
freqMap[key] = --freqToList[freq].end();
if (freqToList[minFreq].size() == 0) {
minFreq++;
}
return val;
}
void put(int key, int value) {
if (capacity <= 0) {
return;
}
if (cache.count(key) != 0) {
cache[key].first = value;
get(key);
} else {
if (size >= capacity) {
int delKey = freqToList[minFreq].front();
freqToList[minFreq].pop_front();
freqMap.erase(delKey);
cache.erase(delKey);
size--;
swapCount++; // 页面置换次数加一
}
cache[key] = {value, 1};
freqToList[1].push_back(key);
freqMap[key] = --freqToList[1].end();
minFreq = 1;
size++;
}
}
int getSwapCount() { // 新增获取页面置换次数的方法
return swapCount;
}
};
```
这样,每次淘汰缓存项时,页面置换次数就会加一。可以通过调用getSwapCount()方法获取页面置换次数。
阅读全文