LRU快取機制C 泛型實現

2021-10-24 11:14:13 字數 3032 閱讀 4647

運用你所掌握的資料結構,設計和實現乙個lru(最近最少使用)快取機制。它應該支援以下操作:獲取資料get和寫入資料put

獲取資料get(key)- 如果關鍵字(key)存在於快取中,則獲取關鍵字的值(總是正數),否則返回-1.

寫入資料put(key, value)- 如果關鍵字已經存在,則變更其資料值;如果關鍵字不存在,則插入該組 [關鍵字/值] 。當快取容量達到上限時,他應該在寫入新資料之前刪除最久未使用的資料值,從而為新資料值留出空間。

#include

#include

using

namespace std;

template

<

class

key,

class

value

>

struct doublelistnode

};

然後是鍊錶的實現:

template

<

class

key,

class

value

>

class

doublelinkedlist

__iterator

(nodetype *node)

:m_node

(node)

__iterator

(const __iterator &rhs)

:m_node

(rhs.m_node)

// 等於運算子

bool

operator==(

const __iterator &rhs)

const

// 不等於運算子

bool

operator!=(

const __iterator &rhs)

const

// 解引用運算子

value&

operator*(

)const

// 獲取所指節點的key

key key()

const

// 獲取所指節點的value

value value()

const

// 為了能夠讓鍊錶能夠訪問私有資料成員

friend

class

doublelinkedlist

;};private

:

size_t m_len;

nodetype *m_head;

nodetype *m_tail;

public

:doublelinkedlist()

:m_len(0

),m_head

(nullptr),

m_tail

(nullptr)~

doublelinkedlist()

iterator begin()

const

iterator end()

const

bool

empty()

const

size_t length()

const

// 在頭部插入

iterator insertfront

(const keytype &key,

const valuetype &value)

// 將迭代器所指元素移到頭部

void

movetofront

(iterator iter)

// 尾元素

iterator back()

const

// 刪除尾元素

void

removeback()

// 鍊錶有多個元素

else

--m_len;

}private

:// 在頭部插入節點

void

insertfront

(nodetype *pnode)

++m_len;

}// 將指標所指元素刪除但是並不釋放其空間

void

remove

(nodetype *pnode)

};

最後是lru的實現:

template

<

class

key,

class

value

>

class

lrucache

~lrucache()

value get

(const key &key,

bool

&isok)

// 如果不存在該key

isok =

false

;return

value()

;}void

put(

const key &key,

const value &value)

// 如果不存在該key

// 如果快取已滿

if(m_list.

length()

== m_capacity)

auto iter = m_list.

insertfront

(key, value)

;

m_cache[key]

= iter;}}

;

測試**:

int

main()

測試結果為:

LRU快取機制實現

題目描述 設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能 set key,value 將記錄 key,value 插入該結構 get key 返回key對應的value值 要求 set和get方法的時間複雜度為o 1 某個key的set或get操作一旦發生,認為這個key...

LRU快取機制演算法實現

就是一種快取淘汰策略。計算機的快取容量有限,如果快取滿了就要刪除一些內容,給新內容騰位置。但問題是,刪除哪些內容呢?我們肯定希望刪掉哪些沒什麼用的快取,而把有用的資料繼續留在快取裡,方便之後繼續使用。那麼,什麼樣的資料,我們判定為 有用的 的資料呢?lru 快取淘汰演算法就是一種常用策略。lru 的...

LRU快取機制

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰不存在,則寫入其資料值。...