cpp-lru-cache 项目使用教程

cpp-lru-cache 项目使用教程

cpp-lru-cacheSimple and reliable LRU cache for c++ based on hashmap and linkedlist项目地址:https://gitcode.com/gh_mirrors/cp/cpp-lru-cache

1. 项目的目录结构及介绍

cpp-lru-cache/
├── CMakeLists.txt
├── LICENSE
├── README.md
├── include/
│   └── lrucache.hpp
└── src/
    └── lrucache.cpp
  • CMakeLists.txt: 用于构建项目的CMake配置文件。
  • LICENSE: 项目的许可证文件。
  • README.md: 项目的基本介绍和使用说明。
  • include/lrucache.hpp: LRU缓存的头文件。
  • src/lrucache.cpp: LRU缓存的实现文件。

2. 项目的启动文件介绍

项目的启动文件主要是src/lrucache.cpp,它包含了LRU缓存的实现代码。用户可以通过编译和链接这个文件来使用LRU缓存功能。

3. 项目的配置文件介绍

项目的主要配置文件是CMakeLists.txt,它定义了如何构建项目。用户可以根据自己的需求修改这个文件来调整编译选项和依赖项。

cmake_minimum_required(VERSION 2.8)
project(lru_cache)

set(CMAKE_CXX_STANDARD 11)

include_directories(include)

add_executable(lru_cache src/lrucache.cpp)

以上是cpp-lru-cache项目的基本使用教程,涵盖了项目的目录结构、启动文件和配置文件的介绍。用户可以根据这些信息快速上手并使用该项目。

cpp-lru-cacheSimple and reliable LRU cache for c++ based on hashmap and linkedlist项目地址:https://gitcode.com/gh_mirrors/cp/cpp-lru-cache

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
LRU (Least Recently Used) 页面置换算法是一种常用的页面置换算法,其思想是将最近最少使用的页面淘汰掉。下面是 C++ 实现: ```cpp #include <iostream> #include <list> #include <unordered_map> using namespace std; class LRUCache { public: LRUCache(int capacity) : cap(capacity) {} int get(int key) { if (cache.find(key) == cache.end()) return -1; auto it = cache[key]; int val = it->second; lru.erase(it); lru.push_front({key, val}); cache[key] = lru.begin(); return val; } void set(int key, int value) { if (cache.find(key) == cache.end()) { if (lru.size() == cap) { auto last = lru.back(); int delKey = last.first; lru.pop_back(); cache.erase(delKey); } lru.push_front({key, value}); cache[key] = lru.begin(); } else { auto it = cache[key]; lru.erase(it); lru.push_front({key, value}); cache[key] = lru.begin(); } } private: int cap; list<pair<int, int>> lru; unordered_map<int, list<pair<int, int>>::iterator> cache; }; int main() { LRUCache lru(2); lru.set(1, 1); lru.set(2, 2); cout << lru.get(1) << endl; // 1 lru.set(3, 3); cout << lru.get(2) << endl; // -1 lru.set(4, 4); cout << lru.get(1) << endl; // -1 cout << lru.get(3) << endl; // 3 cout << lru.get(4) << endl; // 4 return 0; } ``` 在这个实现中,我们使用双向链表 `lru` 维护页面的使用顺序,使用哈希表 `cache` 存储页面的值和对应的迭代器。当访问一个页面时,我们将其从链表中删除,并添加到链表头部;当添加一个页面时,我们将其添加到链表头部,并且若链表长度超过了容量,则删除链表末尾的页面。注意,我们使用 `unordered_map` 而不是 `map`,因为前者的查找、插入和删除时间复杂度都是 $O(1)$。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姬彭霖Hortense

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值