最近项目里需要实现一个LRU算法,github上找到一个c++版本,虽然C++用的少,但看了下源码之后发现学到了不少知识。本文记录如何使用该开源库,最后给出学习之后对源代码的注释版本。
原项目地址:cpp-lru-cache
源代码使用,将如下代码命名为lru_example.cpp,并与文件lrucache.hpp放在同一个目录下。使用如下命令编译:

g++ -g -std=c++11 -o lru_example lru_example.cpp

lru_example.cpp

#include "lrucache.hpp"
#include <iostream>

int main()
{
    /**Creates cache with maximum size of three. When the 
    size in achieved every next element will replace the 
    least recently used one */
    
    cache::lru_cache<int, std::string> cache(3);

    cache.put(0, "zero");
    cache.put(1, "two");
    cache.put(2, "three");
    cache.put(3, "four");
    cache.put(4, "five");

    const std::string& from_cache = cache.get(4);
    std::cout << from_cache << std::endl;

    return 0;
}

程序执行结果:

[root include]#./lru_example
five

根据个人习惯修改版本:
cpp-lru-cache
本文所讲的lru cpp实现版本非线程安全,使用前需要加锁以保证原子性。
google开源代码里有一套线程安全的实现,周末有时间学习实现思想,将代码抽成公共代码提交到github.