基本上我有一个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() ); }};总结
以上是内存溢出为你收集整理的c容器允许您按上次访问的时间对项目进行排序?全部内容,希望文章能够帮你解决c容器允许您按上次访问的时间对项目进行排序?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)