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

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

概述这样的事情存在吗?或者有人可以建议我如何实施这样的容器? 基本上我有一个std :: map,它使用64位整数作为键,自定义数据类型作为包含项. 我需要能够以最佳方式定期删除一段时间内未访问过的项目.有没有人对此有任何建议? 干杯 一个想法:维护一个 std::deque,它会在你访问地图时将地图元素中的迭代器推到前面.然后,您可以轻松查看双端队列,以了解最近使用过哪些元素. 一些C sketch 这样的事情存在吗?或者有人可以建议我如何实施这样的容器?

基本上我有一个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容器允许您按上次访问的时间对项目进行排序?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1237327.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存