Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get
and set
.
get(key)
- Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
set(key, value)
- Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.
考察LRU算法,记录项的访问时间,满了删掉最久远的就好了
class LRUCache{
public:
LRUCache(int capacity):MAXSIZE(capacity),times(0) {
}
int get(int key) {
auto ita = mem.find(key);
if(ita== mem.end()){
return -1;
}else{
ita->second.second=times++;
return ita->second.first;
}
}
void set(int key, int value) {
if(mem.size()==MAXSIZE && mem.find(key)==mem.end()){
typedef pair<const int,pair<int,int> > par;
auto ita = min_element(mem.begin(),mem.end(),[&](par & l,par & r){
return l.second.second < r.second.second;
});
mem.erase(ita);
}
mem[key] = pair<int,int>(value,times++);
}
private:
map<int,pair<int,int> > mem;
const int MAXSIZE;
int times;
};