天天看点

[LeetCode] LRU Cache

design and implement a data structure for least recently used (lru) cache. it should support the following operations: get and set.

<code>get(key)</code> - get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.

<code>set(key, value)</code> - set or insert the value if the key is not already present. when the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.

cache(高速缓存),需实现随机存取操作和高效的插入删除操作。

<code>vector</code>可以高效的随机存取,但是在插入删除会造成内存块的拷贝。另外,当内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。

<code>list</code>可以高效的插入删除,但是不支持随机存取。

<code>deque</code>支持随机存取,但是只能在两端进行插入删除操作。

因此采用双向链表来实现插入删除操作,同时采用哈希表来实现高效的随机存取。在<code>unordered_map&lt;key, value&gt;</code>中,<code>key</code>表示键值,<code>value</code>存储该键值在链表中所对应的结点位置。

琢摸着感觉上述代码效率还是偏低,于是把cache结点由一个struct结构体改为了一个pair,但是经过测试效果相当。以下是第二个版本的代码: