【发布时间】:2016-07-30 16:33:05
【问题描述】:
我有 200 组大约 50,000 个唯一整数,范围在 0 到 500,000 之间,我需要映射到另一个小值(整数对,值不相关,因此没有按需计算)。
我尝试使用 std::unordered_maps,这使用了大约 50MB(在 VS2015 堆诊断工具中测量),虽然性能很好,但我想降低这个内存使用量(打算在一些小的 500MB 上作为后台服务云服务器)。
实际上我的初始版本是 200 个独立的 std::unordered_map<int, std::pair<int, int>>。
一个选项似乎是排序数组并使用二分查找,但还有其他选择吗?
【问题讨论】:
-
200 个“集合”中的每一个都有自己独特的地图吗?
-
你试过
std::map吗? -
@Galik 既没有空间效率,也没有像
std::unordered_map在这种情况下那样高效。我更好奇是否对存储桶大小进行了任何调整。 -
200 * 50000 * 4 字节的整数等于 40 兆字节。所以在 50 兆字节(包括映射值)的情况下,我会说你做得很好。
-
假设集合是动态的(因为它们必须是有序数组才能正常工作),我会考虑我在旧答案中概述的技术:stackoverflow.com/a/9754470/179910
标签: c++ optimization data-structures