C++实现hashLRU

 

#include <iostream>
#include <unordered_map>
#include <list>

template <typename K, typename V>
class hashLRU
{
private:
	std::unordered_map<K,typename std::list<std::pair<K, V>>::iterator> mp;
	std::list<std::pair<K, V>> ls;
	int size;

public:
	hashLRU(const int& size = 4) : size(size) {}
	~hashLRU()
	{
	}

	void put(K key, V value);

	V get(K key);
};

template <typename K, typename V>
void hashLRU<K, V>::put(K key, V value)
{
	auto it = mp.find(key);
	if (it != mp.end())
	{
		ls.erase(mp[key]);
	}

	ls.emplace_front(key, value);
	mp[key] = ls.begin();

	if (this->size < ls.size())
	{
		K k = ls.back().first;
		mp.erase(k);
		ls.pop_back();
	}
}

template <typename K, typename V>
V hashLRU<K, V>::get(K key)
{
	auto it = mp.find(key);
	if (it != mp.end())
	{
		ls.emplace_front(std::make_pair(mp[key]->first, mp[key]->second));
		ls.erase(mp[key]);
		mp[key] = ls.begin();
		return mp[key]->second;
	}

	return V();
}

int main(int argc, char** argv)
{
	hashLRU<int,std::string> hash(5);
	std::cout << hash.get(3) << std::endl;
	hash.put(3,"你好");
	hash.put(2, "hello");
	hash.put(6, "aaa");
	hash.put(8, "bbb");
	hash.put(1, "ddd");
	hash.put(6, "adg");
	hash.put(7, "dddsa");
	hash.put(10, "ghh");
	std::cout << hash.get(2) << std::endl;
	std::cout << hash.get(1) << std::endl;
	std::cout << hash.get(8) << std::endl;
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值