您的位置:首页 > 其它

146. LRU Cache

2017-02-17 12:04 330 查看
模拟题,思路简单,但是难是难在对c++ 的用法!!!要好好学习!!!

2刷还要解决超时问题和自己写一次!

class LRUCache{

private:
typedef pair<int,list<int>::iterator> PILI;
int capacity;
map<int,PILI> datas;
list<int> s;
public:
LRUCache(int capacity) {
this->capacity=capacity;
}

int get(int key) {
auto iter=datas.find(key);
if(iter!=datas.end())
{
update(iter);
return iter->second.first;
}
else
return -1;
}

void set(int key, int value) {
int length=datas.size();
auto iter=datas.find(key);
if(iter!=datas.end())
{
iter->second.first=value;
update(iter);
}
else
{
if(length>=capacity)
{
datas.erase(s.back());
s.pop_back();
}
s.push_front(key);
datas[key]=PILI(value,s.begin());
}
}

private:
void update(map<int,PILI>::iterator iter)
{
int key=iter->first;
s.erase(iter->second.second);
s.push_front(key);
iter->second.second=s.begin();

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: