c容器允许您按上次访问的时间对项目进行排序?

前端之家收集整理的这篇文章主要介绍了c容器允许您按上次访问的时间对项目进行排序?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这样的事情存在吗?或者有人可以建议我如何实施这样的容器?

基本上我有一个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() );
  }
};
原文链接:https://www.f2er.com/c/117341.html

猜你在找的C&C++相关文章