我有一个关于std :: set容器的简短问题.现在我正在使用pushback功能来提供我的设置.对于每个push_back,该集合变得越来越大.我只对最新的30个元素感兴趣......可以删除旧元素.所以我的想法是将集合的大小限制为30个元素左右,并通过这样做摆脱不需要的旧元素.但是,默认情况下,该集不支持限制.我可以偶尔检查一下这个集的大小,然后手动删除多余的元素.有更聪明的方法吗?
关心Lumpi
您需要自己构建一个 LRU 结构。一种方法是让 std::map 和 std::list 指向彼此的迭代器。那是:
struct lru_entry {
std::list<lru_entry *>::iterator lru_iterator;
std::map<your_data, lru_entry *>::iterator map_iterator;
};
std::list<lru_entry *> lru;
std::map<your_data, lru_entry *> lookup;
Run Code Online (Sandbox Code Playgroud)
每当您在地图中查找条目时,请将其关联的列表条目移动到列表的开头。当向map添加一个entry时,创建一个新的lru_entry,将其添加到map和list中,并更新lru_entry结构中的迭代器。当查找映射超过 30 个条目时,您可以使用 lru 列表快速查找最旧的条目。
您可以在之前的 stackoverflow 问题中找到有关如何构建 LRU 列表的更多建议。
| 归档时间: |
|
| 查看次数: |
2690 次 |
| 最近记录: |