这样的事情存在吗?或者有人可以建议我如何实施这样的容器?
基本上我有一个std :: map,它使用64位整数作为键,自定义数据类型作为包含项.
我需要能够以最佳方式定期删除一段时间内未访问过的项目.有没有人对此有任何建议?
干杯
解决方法
一个想法:维护一个
std::deque,它会在你访问地图时将地图元素中的迭代器推到前面.然后,您可以轻松查看双端队列,以了解最近使用过哪些元素.
一些C sketch(没有错误检查,这一点是为了证明在访问地图时更新deque,你可以稍后修剪地图).
class MyMap { typedef std::map<int64_t,void *> Map; Map m_map; std::deque<Map::iterator> m_recentlyUsedItems; public: void *getItem( int64_t key ) { Map::iterator it = m_map.find( key ); if ( it == m_map.end() ) { return 0; } m_recentlyUsedItems.push_front( it ); return it->second; } void removeAllButMostRecentlyUsedItems( int n ) { std::deque<Map::iterator> it = m_recentlyUsedItems.begin(); advance( it,n ); std::deque<Map::iterator> it2 = it; for ( ; it2 != m_recentlyUsedItems.end(); ++it2 ) { m_map.erase( *it2 ); } m_recentlyUsedItems.erase( it,m_recentlyUsedItems.end() ); } };