速度和内存的比较
comparison of speed and memory
我有数十亿个标签。这些标签最多包含大约 20 个整数,范围从 1 到 500。我需要搜索每个标签中每个整数的存在,并可能将整数插入到标签中。我也有内存限制。因此,在某些情况下,我需要删除标签以释放内存。 哪一个更好? 使用矢量保存标签的数据或使用unordered_set?
正如其中一条评论中已经暗示的那样:
std::bitset
将比 20 个整数占用更少的空间,并提供O(1)
添加/检查。 如果每个标签平均有超过 15 个值,或者可以忍受一些额外的内存使用,这是一个好主意。
如果没有,我建议使用矢量而不是集。
- 它在内存中对齐(更少的缓存未命中=>更快(
- 它具有较小的内存占用
- 如果您有批量插入,则可以
reserve()
- 如果对向量进行了排序,则可以使用
std::binary_search
进行O(log n)
查找
根据经验:如果您的元素少于 50 个,则 vector 是您的首选容器。
据我所知,关键操作是找到所有包含某种价值的标签?
- 您是否考虑过翻转结构?而不是将整数存储在 每个标签,为什么不为每个标签提供一个引用列表 您的 500 个价值观?
- 您是否考虑过使用(no-sql(数据库来摆脱内存限制?
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 将字符串存储在c++中的稳定内存中
- 为什么比较运算符如此快速
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 速度和内存的比较
- C++中的结构是否按顺序分配内存?每次都以某种方式获得指针比较的正确答案
- 可以在C++中比较原始内存
- 如何正确比较存储在内存中的两个数组?
- 内存使用比较
- 使用C++原子库,我应该使用什么样的内存顺序进行加载,然后进行比较交换
- 带有内存比较的 STL 映射.如何在运行时设置比较块大小
- 比较两个类的内存布局
- 比较快速两个内存区域
- 如何打印QImage的所有原始数据,以便在内存中进行比较
- 错误:malloc():排序的比较函数内存损坏
- C++内存分配机制性能比较(tcmalloc与jemalloc)
- 如何比较2D矢量大小与操作系统内存地址限制
- C++HTTPS库在性能方面如何比较(例如内存占用、CPU时间等)
- 内存访问比较