File tree 1 file changed +43
-0
lines changed
1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change
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
+ };
You can’t perform that action at this time.
0 commit comments