首页 > 编程语言 >C++面试可能会用到的Cache

C++面试可能会用到的Cache

时间:2023-09-23 23:55:04浏览次数:77  
标签:cnt int 用到 Cache C++ erase Dict value key

LRUCache

  • 描述:考虑维护一个按照最近的使用时间来排序的链表,查询操作去哈希表中查当前key所对应的节点的指针,然后把该节点删除后再插入到链表首。插入操作的话先查询当前的key是否存在,如果存在的话先把当前key所对应的节点删除;如果链表已经满了的话就把链表尾部的元素删除,考虑完这两种情况以后插入操作就可以直接插入在链表前端,同时在哈希表中记录一下当前的指针即可。
class LRUCache {
public:
	struct LRUNode {
		int key, value;
		LRUNode(int k, int v) : key(k), value(v) {}
	}

	list<LRUNode> List;
	unordered_map<int, list<LRUNode>::iterator> Dict;
	int cnt, capa;

   	LRUCache(int capacity) {
		capa = capacity, cnt = 0;
    }
    
    	int get(int key) {
		auto it = Dict.find(key);
		if (it == Dict.end())
			return -1;
		int value = it->second->value;
		erase(it->second);
		put(key, value);
		return value;
    }

	void erase(list<LRUNode>::iterator it) { 
		Dict.erase(it->key);
		List.erase(it);
		--cnt;
	}
    
   	 void put(int key, int value) {
		if (Dict.find(key) != Dict.end()) 
			erase(Dict.find(key));
		if (cnt == capa) { 
			auto tail = List.end();
			erase(--tail);
		}
		List.push_front((LRUNode){key, value});
		Dict[key] = List.begin();
		cnt = cnt + 1; 
    }
};

标签:cnt,int,用到,Cache,C++,erase,Dict,value,key
From: https://www.cnblogs.com/Langxiaoqi/p/17725462.html

相关文章

  • 《C++ Primer Plus》
    第一章预备知识1.1C++简介C++编程语言融合了3种不同的编程方式:C语言代表的过程性语言、面向对象语言、C++模板支持的泛型编程。1.2C++简史C语言  20世纪70年代,贝尔实验室的DennisRitchie致力开发UNIX操作系统。传统上,程序员使用汇编语言来满足这些需求。但由于汇编语......
  • c++总结
    c++prime(常备字典)+c++手册+二十一天学通c++(这个很简单,看个人情况)黑马c++适合绝大多数人入门c++码农论坛更适合二刷,比较精简,讲的不错,但是涉及经验讲解过多,不一定适合新手侯捷以及cherno(这两个是巨佬)适合工作再看......
  • c++基础
    一、C++输出数据数据是信息的载体,写程序的目的就是为了处理数据。1.数据的分类数据有数字、字符和字符串三种类型。数字:直接书写,如:100、18.52、0、9;字符:用半角的单引号包含的一个符号,如:'A'、'Z'、'0'、'9'、'~'、'+',汉字和全角的标点符号不是字符;字符串:用半角的双引号包含......
  • C++ 的cout格式化输出
    在某些实际场景中,我们经常需要按照一定的格式输出数据,比如输出浮点数时保留2位小数,再比如以十六进制的形式输出整数,等等。对于学过C语言的读者应该知道,当使用printf()函数输出数据时,可以通过设定一些合理的格式控制符,来达到以指定格式输出数据的目的。例如%.2f表示输出浮点......
  • C++ 公司数量 正解
    题目描述在某个城市里住着n个人,现在给定关于n个人的m条信息(即某2个人认识),假设所有认识(直接或间接认识都算认识)的人一定属于同一个公司。若是某两人不在给出的信息里,那么他们不认识,属于两个不同的公司。已知人的编号从1至 n。请计算该城市最多有多少公司。......
  • C++11新标准
    c++11标准(1)一、longlong类型新增了类型longlong和unsignedlonglong,以支持64位(或更宽)的整型。在VS中,int和long都是4字节,longlong是8字节。在Linux中,int是4字节,long和longlong是8字节。二、char16_t和char32_t类型新增了类型char16_t和char32_t,以支持16位和32位......
  • 笔记 | C++ 命名空间
    命名空间(Namespace)是C++中用于组织和管理代码的重要机制。它允许开发者将一组相关的变量、函数、类等封装在一个独立的命名空间中,以避免命名冲突和提高代码的可维护性。本文将介绍命名空间的概念、如何应用命名空间,以及它的优点和缺点。命名空间的概念在C++中,命名空间是一个逻......
  • 从安卓模拟器中获取 expo-av 库录音得到的音频文件 file:///data/user/0/mo.com.nccl.
    在使用expo-av录制音频时,录制结束通过recording.getURI()可以获取得到的音频文件的地址。想要获取该文件可以通过发送请求的方式:consturi=recording.getURI();letresponse=awaitfetch(uri);letblob=awaitresponse.blob();如果想直接根据文件路径找到这个文......
  • C++指针和地址偏移在HotSpot VM中的应用
     在前面我们介绍过new运算符,这个操作实际上上包含了如下3个步骤:调用operatornew的标准库函数。此函数会分配一块内存空间以便函存储相应类型的实例;调用相应类的构造函数;返回一个指向该对象的指针。在第一步中,其实我们可以自己写个operatornew函数对标准库函数进行重载,通......
  • c++ 数据类型及范围
    short:\(-2^{15}\sim2^{15}-1\)unsignedshort:\(0\sim2^{16}-1\)int:\(-2^{31}\sim2^{31}-1\)unsignedint:\(0\sim2^{32}-1\)longlong:\(-2^{63}\sim2^{63}-1\)unsignedlonglong:\(0\sim2^{64}-1\)参考资料:https://www.cnblogs.com......