void set(int key, int value) { if(cacheMap.find(key) == cacheMap.end()){ if(cacheList.size() == capacity){ cacheMap.erase(cacheList.back().key); cacheList.pop_back(); } cacheList.push_front(CacheNode(key, value)); cacheMap[key] = cacheList.begin(); } else{ cacheMap[key]->value = value; cacheList.splice(cacheList.begin(), cacheList, cacheMap[key]); cacheMap[key] = cacheList.begin(); } }
// @param key, an integer // @param value, an integer // @return nothing void set(int key, int value) { // write your code here if(CacheMap.find(key) == CacheMap.end()) { if(CacheList.size() == size) { CacheMap.erase(CacheList.back().key); CacheList.pop_back(); } CacheList.push_front(CacheNode(key, value)); CacheMap[key] = CacheList.begin(); } else { list<CacheNode>::iterator it = CacheMap[key]; it->val = value; CacheList.splice(CacheList.begin(), CacheList, it); } }
void set(int key, int value) { if (cacheMap.find(key) != cacheMap.end()) { auto it = cacheMap[key]; cacheList.splice(cacheList.begin(), cacheList , it); cacheMap[key] = cacheList.begin(); cacheList.begin()->value = value; } else { if(cacheList.size() == size) { cacheMap.erase(cacheList.back().key); cacheList.pop_back(); } cacheList.push_front(CacheNode(key, value)); cacheMap[key] = cacheList.begin(); } }
bool_t NetworkTask::Run() { bool_t ret = FALSE; Node *root = static_cast< Node* >(Thread::UserPtr()); if(!root) { ECILA_TRACE(); return FALSE; } CacheNode(root); while(!Thread::IsStop()) { demultiplexer_->HandleEvents(0); ret = DispatchMsg(); if(!ret) { ecila_msleep(1); } } return TRUE; }
void set(int key, int value) { if (m_cachemap.find(key) == m_cachemap.end()) { // 如果到达最大尺寸,删除链表尾部节点,即访问最少的节点。 if (m_cachelist.size() == m_capacity) { m_cachemap.erase(m_cachelist.back().key); m_cachelist.pop_back(); } // 插入新节点到链表头部,并且在map中增加该节点。 m_cachelist.push_front(CacheNode(key, value)); m_cachemap[key] = m_cachelist.begin(); }else { // 更新节点的值,把当前访问的节点移到链表头部,并且更新map中该节点的地址。 m_cachemap[key]->value = value; m_cachelist.splice(m_cachelist.begin(), m_cachelist, m_cachemap[key]); m_cachemap[key] = m_cachelist.begin(); } }
void set(int key, int value) { if (cacheMap.find(key) == cacheMap.end()) { if (cacheList.size() == capacity) { // delete end node of the list (least visited node) cacheMap.erase(cacheList.back().key); cacheList.pop_back(); } // insert new node in teh beginning of the list, update map cacheList.push_front(CacheNode(key, value)); cacheMap[key] = cacheList.begin(); } else { // update node value, move the current visited node to the beginning of the list, update the address of the node cacheMap[key]->value = value; //cacheList.splice(cacheList.begin(), cacheList, cacheMap[key]); CacheNode tmp = *cacheMap[key]; cacheList.erase(cacheMap[key]); cacheList.push_front(tmp); cacheMap[key] = cacheList.begin(); } }
void set(int key, int value) { if(cacheMap.find(key)==cacheMap.end()){ //new kv if(cacheList.size()==capacity){ //the list is full delete the tail of the list cacheMap.erase(cacheList.back().key); cacheList.pop_back(); } //move it to the front cacheList.push_front(CacheNode(key,value)); cacheMap[key]=cacheList.begin(); }else{ //old kv cacheMap[key]->value=value; //move it to the front cacheList.splice(cacheList.begin(),cacheList,cacheMap[key]); cacheMap[key]=cacheList.begin(); } }