include: co/lru_map.h.
#LruMap
template <typename K, typename V> class LruMap;
LruMap
是基于 LRU (least recently used) 策略实现的 map,当 map 中元素数量达到上限时,优先替换掉最近最少使用的数据。它基于 std::list、std::unordered_map 实现,内部元素是无序的。
#LruMap::LruMap
LruMap();
explicit LruMap(size_t capacity);
- 默认构造函数使用 1024 作为最大容量。
- 第二个构造函数以参数 capacity 作为最大容量。
#LruMap::begin
iterator begin() const;
- 返回指向第一个元素的 iterator,当 LruMap 为空时,返回值与 LruMap::end() 相等。
#LruMap::clear
void clear();
- 此方法清空 LruMap 内的元素,size() 会变成 0,容量保持不变。
#LruMap::empty
bool empty() const;
- 此方法判断 LruMap 是否为空。
#LruMap::end
iterator end() const;
- 返回指向最后一个元素的下一个位置的 iterator,它本身并不指向任何元素。当 LruMap 为空时,begin() 与 end() 相等。
#LruMap::erase
void erase(iterator it);
void erase(const key_type& key);
- 通过 iterator 或 key 删除元素。
#LruMap::find
iterator find(const key_type& key)
- 此方法通过 key 查找元素,若找到则返回指向该元素的 iterator,否则返回值等于 end()。
#LruMap::insert
template <typename Key, typename Val>
void insert(Key&& key, Val&& value);
- 插入元素,仅当 key 不存在时,才会插入新元素。若 key 已经存在,则不会进行任何操作。
- 插入元素时,若元素数量已经达到最大容量,则会删除最近最少访问的元素。
#LruMap::size
size_t size() const;
- 此方法返回 LruMap 中的元素个数。
#LruMap::swap
void swap(LruMap& x) noexcept;
void swap(LruMap&& x) noexcept;
- 交换两个 LruMap 的内容,此操作仅交换内部指针、大小、容量等信息。
#代码示例
LruMap<int, int> m(128); // capacity: 128
auto it = m.find(1);
if (it == m.end()) {
m.insert(1, 23);
} else {
it->second = 23;
}
m.erase(it); // erase by iterator
m.erase(it->first); // erase by key
m.clear(); // clear the map