problemscpp
A collection of my answers to algorithm problems in c++.
Public 成员函数 | Private 属性 | 所有成员列表
leetcode::lfu_cache::LFUCache类 参考

#include <leetcode.h>

Public 成员函数

 LFUCache (int capacity)
 用数据结构的容量 capacity 初始化对象 更多...
 
int get (int key)
 如果键 key 存在于缓存中,则获取键的值,否则返回 -1 。 更多...
 
void put (int key, int value)
 如果键 key 已存在,则变更其值;如果键不存在,请插入键值对。当缓存达到其容量 capacity 时,则应该在插入新项之前,移除最不经常使用的项。在此问题中,当存在平局(即两个或更多个键具有相同使用频率)时,应该去除 最近最久未使用 的键。 更多...
 

Private 属性

int capacity
 
unordered_map< int, int > cnt
 
map< int, list< int > > tnc
 
unordered_map< int, int > um
 

详细描述

在文件 leetcode.h3373 行定义.

构造及析构函数说明

◆ LFUCache()

leetcode::lfu_cache::LFUCache::LFUCache ( int  capacity)
inline

用数据结构的容量 capacity 初始化对象

在文件 leetcode.h3381 行定义.

成员函数说明

◆ get()

int leetcode::lfu_cache::LFUCache::get ( int  key)

如果键 key 存在于缓存中,则获取键的值,否则返回 -1 。

在文件 leetcode.cpp9434 行定义.

9434 {
9435 if(capacity == 0) {
9436 return -1;
9437 }
9438 int ans = -1;
9439 if(um.contains(key)) {
9440 // 如果存在
9441 ans = um[key];
9442 cnt[key]++; //增加计数
9443 const auto it = find(tnc[cnt[key] - 1].begin(), tnc[cnt[key] - 1].end(), key);//
9444 if(it != tnc[cnt[key] - 1].end()) {
9445 tnc[cnt[key] - 1].erase(it);
9446 if(tnc[cnt[key] - 1].empty()) {
9447 tnc.erase(cnt[key] - 1);
9448 }
9449 }
9450 tnc[cnt[key]].emplace_back(key);
9451 }
9452 return ans;
9453 }
bool find(vector< unordered_set< int > > &g, int x, vector< bool > &st, vector< int > &match)
Definition: acwing.cpp:7522
unordered_map< int, int > um
Definition: leetcode.h:3374
map< int, list< int > > tnc
Definition: leetcode.h:3376
unordered_map< int, int > cnt
Definition: leetcode.h:3375

引用了 capacity, cnt, acwing::acwing861::find(), tnc , 以及 um.

被这些函数引用 leetcode::lfu_cache::TEST().

◆ put()

void leetcode::lfu_cache::LFUCache::put ( int  key,
int  value 
)

如果键 key 已存在,则变更其值;如果键不存在,请插入键值对。当缓存达到其容量 capacity 时,则应该在插入新项之前,移除最不经常使用的项。在此问题中,当存在平局(即两个或更多个键具有相同使用频率)时,应该去除 最近最久未使用 的键。

在文件 leetcode.cpp9455 行定义.

9455 {
9456 if(capacity == 0) {
9457 return;
9458 }
9459 cnt[key]++;
9460 if(um.size() == capacity) {
9461 //满
9462 if(um.contains(key)) {
9463 //已存在
9464 tnc[cnt[key] - 1].erase(find(tnc[cnt[key] - 1].begin(), tnc[cnt[key] - 1].end(), key));
9465 if(tnc[cnt[key] - 1].empty()) {
9466 tnc.erase(cnt[key] - 1);
9467 }
9468 } else {
9469 //不存在
9470 while(tnc.begin()->second.empty()) {
9471 tnc.erase(tnc.begin());
9472 }
9473 const auto evicted = tnc.begin()->second.begin();
9474 const int val = *evicted;
9475 tnc.begin()->second.erase(evicted);
9476 cnt.erase(val);
9477 um.erase(val);
9478 }
9479 } else {
9480 //未满
9481 if(um.contains(key)) {
9482 //已存在
9483 tnc[cnt[key] - 1].erase(find(tnc[cnt[key] - 1].begin(), tnc[cnt[key] - 1].end(), key));
9484 if(tnc[cnt[key] - 1].empty()) {
9485 tnc.erase(cnt[key] - 1);
9486 }
9487 } else {
9488 //不存在
9489 }
9490 }
9491 tnc[cnt[key]].emplace_back(key);
9492 um[key] = value;
9493 }

引用了 capacity, cnt, acwing::acwing861::find(), tnc , 以及 um.

被这些函数引用 leetcode::lfu_cache::TEST().

类成员变量说明

◆ capacity

int leetcode::lfu_cache::LFUCache::capacity
private

在文件 leetcode.h3377 行定义.

被这些函数引用 get() , 以及 put().

◆ cnt

unordered_map<int, int> leetcode::lfu_cache::LFUCache::cnt
private

在文件 leetcode.h3375 行定义.

被这些函数引用 get() , 以及 put().

◆ tnc

map<int, list<int> > leetcode::lfu_cache::LFUCache::tnc
private

在文件 leetcode.h3376 行定义.

被这些函数引用 get() , 以及 put().

◆ um

unordered_map<int, int> leetcode::lfu_cache::LFUCache::um
private

在文件 leetcode.h3374 行定义.

被这些函数引用 get() , 以及 put().


该类的文档由以下文件生成: