H*********a 发帖数: 34 | 1 用的list和unordered_map
----------------------------
谢谢提醒,改过之后,发现还是通不过
class LRUCache{
public:
int cap;
unordered_map mymap;
list mylist;
LRUCache(int capacity) {
cap = capacity;
}
int get(int key) {
unordered_map::iterator it = mymap.find(key);
if (it == mymap.end())
return -1;
else {
list::iterator it_list = mylist.begin();
while(*it_list != key) it_list++;
mylist.erase(it_list);
mylist.push_back(key);
return it->second;
}
}
void set(int key, int value) {
unordered_map::iterator it = mymap.find(key);
if (it == mymap.end()) {
if (mymap.size() < cap) {
mymap[key] = value;
mylist.push_back(key);
}
else {
int key_delete = mylist.front();
mylist.pop_front();
unordered_map::iterator it_delete = mymap.find(key
_delete);
mymap.erase(it_delete);
mylist.push_back(key);
mymap[key] = value;
}
}
else {
mymap[key] = value;
list::iterator it_list = mylist.begin();
while(*it_list != key) it_list++;
mylist.erase(it_list);
mylist.push_back(key);
}
}
}; |
H*********a 发帖数: 34 | 2 谢谢各位了~~~还有就是自己写的代码经常很messy,不知道这回这个按标准算如何的
【在 H*********a 的大作中提到】 : 用的list和unordered_map : ---------------------------- : 谢谢提醒,改过之后,发现还是通不过 : class LRUCache{ : public: : int cap; : unordered_map mymap; : list mylist; : LRUCache(int capacity) { : cap = capacity;
|
w*******s 发帖数: 96 | 3 你的get函数成功查询后,应该把list中它的位置调整到最新?
int get(int key) {
unordered_map::iterator it = mymap.find(key);
if (it == mymap.end())
return -1;
else
return it->second;
} |
H*********a 发帖数: 34 | 4 哦,忘了查看也算调用了,谢谢!
【在 w*******s 的大作中提到】 : 你的get函数成功查询后,应该把list中它的位置调整到最新? : int get(int key) { : unordered_map::iterator it = mymap.find(key); : if (it == mymap.end()) : return -1; : else : return it->second; : }
|