Skip to content

Commit a1a9b9b

Browse files
committedApr 24, 2020
146
1 parent cb320de commit a1a9b9b

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed
 

‎146.cpp

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
class LRUCache {
2+
private:
3+
unordered_map<int, pair<int, list<int>::iterator>> cacheObj;
4+
list<int> LRUObj;
5+
int capacity_;
6+
7+
public:
8+
LRUCache(int capacity) {
9+
capacity_ = capacity;
10+
}
11+
12+
void useItem(unordered_map<int, pair<int, list<int>::iterator>>::iterator& iter) {
13+
LRUObj.erase(iter->second.second);
14+
LRUObj.push_front(iter->first);
15+
iter->second.second = LRUObj.begin();
16+
}
17+
18+
int get(int key) {
19+
auto iter = cacheObj.find(key);
20+
if (iter == cacheObj.end()) {
21+
return -1;
22+
}
23+
useItem(iter);
24+
return iter->second.first;
25+
}
26+
27+
void put(int key, int value) {
28+
// If the key exists
29+
auto iter = cacheObj.find(key);
30+
if (iter != cacheObj.end()) {
31+
useItem(iter);
32+
cacheObj[key] = {value, LRUObj.begin()};
33+
return;
34+
}
35+
if (capacity_ == cacheObj.size()) {
36+
cacheObj.erase(LRUObj.back());
37+
LRUObj.pop_back();
38+
}
39+
LRUObj.push_front(key);
40+
cacheObj.insert({key, {value, LRUObj.begin()}});
41+
return;
42+
}
43+
};

0 commit comments

Comments
 (0)
Please sign in to comment.