c++ - 如何实现一个唯一ID队列,其中元素可以在C++中“碰撞”到顶部?
问题描述
我正在实现一个元素缓存(由唯一 ID 表示),并保留最大数量的元素。当我达到最大尺寸时删除最后使用的元素。所以它看起来像一个队列,但具有独特的元素,因为我不想多次添加相同的 id。
但是元素可以被多次使用,并且在再次使用时应该回到队列的顶部,以便缓存真正删除最后使用的元素。
我真的不知道该怎么做。我的第一个猜测是使用 std::list,因此手动管理元素的唯一性和“移至顶部”操作。
有没有更聪明的方法来实现这一目标?
编辑:我不知道名字,但这或多或少是最近最少使用的算法。
解决方案
也许您正在寻找std::set
带有自定义比较运算符的?
我在这里找到了一个 multiset 的例子。Multiset 允许重复,set 不允许,所以这更适合您的账单。
借鉴相同的想法,您可以拥有这样的结构 -
struct Elem
{
std::string UID;
std::chrono::time_point lastUsed;
}
lastUsed
如果您重新使用缓存中的项目,请更改参数。
推荐阅读
- r - R - 如何使用不同的空间 data.frames 编写嵌套的 for 循环
- angular - 使用 ngFor 循环非数组变量
- r - 随机森林给了我 0% 的准确率
- java - 使用测试运行器进行两个不同的测试 JUnit
- python - 属性错误:__enter__
- c# - 将多行电子邮件解析为 var
- javascript - CORS 策略:没有“访问控制允许来源”/500(内部服务器错误)问题
- python - 使用 Entrez 以 GFF 格式查找 NCBI 核苷酸的注释数据
- python - IndentationError:仅使用制表符时需要缩进块?
- c++ - 由于缺少 -pthread,CMake check_symbol_exists 不起作用