Redian新闻
>
写的LRU通不过大数据,帮忙看看
avatar
写的LRU通不过大数据,帮忙看看# JobHunting - 待字闺中
H*a
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);
}
}
};
avatar
H*a
2
谢谢各位了~~~还有就是自己写的代码经常很messy,不知道这回这个按标准算如何的

【在 H*********a 的大作中提到】
: 用的list和unordered_map
: ----------------------------
: 谢谢提醒,改过之后,发现还是通不过
: class LRUCache{
: public:
: int cap;
: unordered_map mymap;
: list mylist;
: LRUCache(int capacity) {
: cap = capacity;

avatar
w*s
3
你的get函数成功查询后,应该把list中它的位置调整到最新?
int get(int key) {
unordered_map::iterator it = mymap.find(key);
if (it == mymap.end())
return -1;
else
return it->second;
}
avatar
H*a
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;
: }

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。