首页 > 编程语言 >LRU算法 C++

LRU算法 C++

时间:2023-11-10 18:45:04浏览次数:39  
标签:capacity int cap second C++ 算法 erase LRU key

#pragma once

#include <list>
#include <unordered_map>
using namespace std;
class LRUCache
{
public:
    LRUCache(int capacity) : cap(capacity)
    {
        m.reserve(capacity);
        m.max_load_factor(0.75);
    }

    int get(int key)
    {
        auto it = m.find(key);
        if (it == m.cend())
            return -1;
        l.splice(l.begin(), l, it->second);
        return it->second->second;
    }

    void put(int key, int value)
    {
        auto it = m.find(key);
        if (it != m.cend())
        {
            l.erase(it->second);
        }
        else if (m.size() >= cap)
        {
            int k = l.rbegin()->first;
            l.pop_back();
            m.erase(k);
        }
        l.emplace_front(make_pair(key, value));
        m[key] = l.begin();
    }

private:
    int cap;
    list<pair<int, int>> l;
    unordered_map<int, list<pair<int, int>>::iterator> m;
};

标签:capacity,int,cap,second,C++,算法,erase,LRU,key
From: https://www.cnblogs.com/txtp/p/17824805.html

相关文章

  • opencv多目标跟踪算法报错与解决方案
    背景:在正确安装opencv-contrib-python4.8.1.78后,在使用opencv进行多目标跟踪时,出现如下错误:错误及解决方法1、AttributeError:module'cv2.cv2'hasnoattribute'MultiTracker_create'解决方法:将trackers=cv2.MultiTracker_create()改成trackers=cv2.legacy.Mu......
  • C++的纯虚函数和抽象类
    在C++中,可以将虚函数声明为纯虚函数,语法格式为:virtual返回值类型函数名(函数参数)=0;纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数。最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。包含纯虚函数的类称为抽......
  • C++的向上转型
    在C/C++中经常会发生数据类型的转换,例如将int类型的数据赋值给float类型的变量时,编译器会先把int类型的数据转换为float类型再赋值;反过来,float类型的数据在经过类型转换后也可以赋值给int类型的变量。数据类型转换的前提是,编译器知道如何对数据进行取舍。例如:inta=......
  • C++中虚继承时的构造函数
    在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。下面我们以菱形继承为例来......
  • C++将派生类赋值给基类
    在C/C++中经常会发生数据类型的转换,例如将int类型的数据赋值给float类型的变量时,编译器会先把int类型的数据转换为float类型再赋值;反过来,float类型的数据在经过类型转换后也可以赋值给int类型的变量。数据类型转换的前提是,编译器知道如何对数据进行取舍。例如:inta=......
  • C++中的语法知识虚继承和虚基类
    多继承(MultipleInheritance)是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员。尽管概念上非常简单,但是多个基类的相互交织可能会带来错综复杂的设计问题,命名冲突就是不可回避的一个。多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成......
  • C++的多重继承
    派生类都只有一个基类,称为单继承(SingleInheritance)。除此之外,C++也支持多继承(MultipleInheritance),即一个派生类可以有两个或多个基类。多继承容易让代码逻辑复杂、思路混乱,一直备受争议,中小型项目中较少使用,后来的Java、C#、PHP等干脆取消了多继承。多继承的语法也很简单,将多......
  • 社区街道治安智慧监管方案,AI算法赋能城市基层精细化治理
    一、背景需求分析随着城市建设进程的加快,城市的管理也面临越来越多的挑战。例如,在城市街道的管理场景中,机动车与非机动车违停现象频发、摊贩占道经营影响交通、街道垃圾堆积影响市容市貌等等,都成为社区和街道的管理难点。这些现象不仅存在严重的安全隐患,同时也影响了城市的市容管理......
  • 【每日例题】蓝桥杯 c++ 手机尾数
    手机尾数题目30年的改革开放,给中国带来了翻天覆地的变化。2011全年中国手机产量约为11.72亿部。手机已经成为百姓的基本日用品!给手机选个好听又好记的号码可能是许多人的心愿。但号源有限,只能辅以有偿选号的方法了。这个程序的目的就是:根据给定的手机尾号(4位),按照—定的规则......
  • C++ 杂项.md
    C++杂项大括弧{}在C++中,大括号{}可以用于多种目的,包括但不限于以下几种:初始化列表:大括号可以用于初始化数组、结构体、类和标准库容器等数据结构。例如:intarr[]={1,2,3,4,5};//初始化整型数组std::vector<int>vec={1,2,3,4,5};//初始化整型向量......