Skip to content

Commit

Permalink
Merge pull request #2 from Abhishek21sh/master
Browse files Browse the repository at this point in the history
LRU Cache Implementation
  • Loading branch information
Upen001 authored Oct 10, 2018
2 parents cb54e91 + f8d9ca0 commit 92756f6
Showing 1 changed file with 73 additions and 0 deletions.
73 changes: 73 additions & 0 deletions LRU Cache Implementation
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#include <bits/stdc++.h>
using namespace std;

class LRUCache
{
// store keys of cache
list<int> dq;

// store references of key in cache
unordered_map<int, list<int>::iterator> ma;
int csize; //maximum capacity of cache

public:
LRUCache(int);
void refer(int);
void display();
};

LRUCache::LRUCache(int n)
{
csize = n;
}

/* Refers key x with in the LRU cache */
void LRUCache::refer(int x)
{
// not present in cache
if (ma.find(x) == ma.end())
{
// cache is full
if (dq.size() == csize)
{
//delete least recently used element
int last = dq.back();
dq.pop_back();
ma.erase(last);
}
}

// present in cache
else
dq.erase(ma[x]);

// update reference
dq.push_front(x);
ma[x] = dq.begin();
}

// display contents of cache
void LRUCache::display()
{
for (auto it = dq.begin(); it != dq.end();
it++)
cout << (*it) << " ";

cout << endl;
}

// Driver program to test above functions
int main()
{
LRUCache ca(4);

ca.refer(1);
ca.refer(2);
ca.refer(3);
ca.refer(1);
ca.refer(4);
ca.refer(5);
ca.display();

return 0;
}

0 comments on commit 92756f6

Please sign in to comment.