速度和内存的比较

comparison of speed and memory

本文关键字:比较 内存 速度      更新时间:2023-10-16

我有数十亿个标签。这些标签最多包含大约 20 个整数,范围从 1 到 500。我需要搜索每个标签中每个整数的存在,并可能将整数插入到标签中。我也有内存限制。因此,在某些情况下,我需要删除标签以释放内存。 哪一个更好? 使用矢量保存标签的数据或使用unordered_set?

正如其中一条评论中已经暗示的那样:

std::bitset将比 20 个整数占用更少的空间,并提供O(1)添加/检查。 如果每个标签平均有超过 15 个值,或者可以忍受一些额外的内存使用,这是一个好主意。

如果没有,我建议使用矢量而不是集。

  • 它在内存中对齐(更少的缓存未命中=>更快(
  • 它具有较小的内存占用
  • 如果您有批量插入,则可以reserve()
  • 如果对向量进行了排序,则可以使用std::binary_search进行O(log n)查找

根据经验:如果您的元素少于 50 个,则 vector 是您的首选容器。

据我所知,关键操作是找到所有包含某种价值的标签?

  • 您是否考虑过翻转结构?而不是将整数存储在 每个标签,为什么不为每个标签提供一个引用列表 您的 500 个价值观?
  • 您是否考虑过使用(no-sql(数据库来摆脱内存限制?