LRU C++实现

LRU C++实现,第1张

#include 
#include 
#include 
#include 
using namespace std;



typedef struct TNodeTab
{
    string value;
    int key;
}TNode;

class Lru
{
public:
    bool put(TNode node)
    {
        auto res = m_map.find(node.key);
        if(res != m_map.end())//key已存在,擦除已存在的数据
        {
            auto  ptr = res->second;//返回list::iterator
            m_list.erase(ptr);
        }
        if(size >= 5)
        {
            m_map.erase(m_list.back().key);//擦除map中的记录
            m_list.pop_back();擦除list中的记录
            size = 4;

        }
        m_list.push_front(node);
        m_map[node.key] = m_list.begin();//如果key存在,更新iterator,否则插入
        size++;
        for(auto i:m_list)
        {
            cout<<i.value<<"";
        }
        cout<<endl;
    };

    bool get(TNode node,TNode& resNode)
    {
        auto res = m_map.find(node.key);
        if(res == m_map.end())
            return false;
        resNode = *(res->second);//返回指向list中数据的iterator
        m_list.splice(m_list.begin(),m_list,res->second);//把这个指针指向最list最前端

        for(auto i:m_list)
        {
            cout<<i.value<<"";
        }
        cout<<endl;
    };
private:
    unordered_map<int,list<TNode>::iterator> m_map;
    list<TNode> m_list;
    uint32_t size;
public:
    Lru(){};
    ~Lru(){};
};

int main()
{
    Lru lru;
    TNode node[8];
    node[0].key =1;
    node[0].value ="a";
    node[1].key =2;
    node[1].value ="b";
    node[2].key =3;
    node[2].value ="c";
    node[3].key =4;
    node[3].value ="d";
    node[4].key =5;
    node[4].value ="e";
    node[5].key =6;
    node[5].value ="f";
    node[6].key =7;
    node[6].value ="g";

    lru.put(node[0]);
    lru.put(node[1]);
    lru.put(node[2]);
    lru.put(node[3]);
    lru.put(node[4]);

    lru.put(node[5]);
    lru.put(node[6]);

    lru.get(node[3],node[7]);

    // lru.put(node[6]);

    // lru.get(node[2],node[7]);
    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/563378.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存