使用C++实现一个LRU cache(2)

int main(){
    hash_map<int, int> map;
    map[9]= 999;
    cout<<map[9]<<endl;
    cout<<map[10]<<endl;
    LRUCache<int, string> lru_cache(100);
    lru_cache.Put(1, "one");
    cout<<lru_cache.Get(1)<<endl;
    if(lru_cache.Get(2) == "")
        lru_cache.Put(2, "two");
    cout<<lru_cache.Get(2);
    return 0;
}

解析:首先使用链表来管理所有的已经使用或正在使用的节点(也就是物理内存页),刚开始分配了一些节点,存放在向量中,在缓冲没有使用完之前都是在向量中存放着,当向量中的缓冲使用完了,那么就必须从链表中的最后一个取出来当做新的节点来使用。在查找节点在链表中的位置时,如果每次都是从头来查找的话,效率会很低,所以使用了hash_map来管理链表中的所有节点,hash_map中都是使用过的节点,在查找时很方便。

C++ 设计新思维》 下载见

C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码

读C++ Primer 之构造函数陷阱

读C++ Primer 之智能指针

读C++ Primer 之句柄类

C语言梳理一下,分布在以下10个章节中:

Linux-C成长之路(一):Linux下C编程概要

Linux-C成长之路(二):基本数据类型

Linux-C成长之路(三):基本IO函数操作

Linux-C成长之路(四):运算符

Linux-C成长之路(五):控制流

Linux-C成长之路(六):函数要义

Linux-C成长之路(七):数组与指针

Linux-C成长之路(八):存储类,动态内存

Linux-C成长之路(九):复合数据类型

Linux-C成长之路(十):其他高级议题

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ead205fc1ccf2ae4b2c0ac2c600f83ed.html