版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
版权
因业务需要, 使用stl中的list+hashmap实现了一个容器做缓存;支持lru特性、 支持O(1)时间的push_back, pop_head, find/delete。
大概实现是 将hashmap的iterator的关键部分作为list的元素; 将list的iterator的关键部分作为hashmap的value的其中一部分。 hashmap是真正存放数据的。
这样能够狠容易的从hashmap::iterator中解析得到对应的list::iterator, 也能够狠容易的从list::iterator解析得到对应的hashmap::iterator。
其中后者代码如下:
inline typename HashType::iterator LitToHit(typename ListType::iterator &it)	{	//static typename HashType::iterator hit = m_hash.begin();//只是重用其中的_M_ht	_List_node* lnode = static_cast