C++ std::map vs dynamic array



我正在尝试制作一个布尔值的三维数组,该数组告诉我以前是否访问过 3D 空间中的某个位置以进行简单的导航算法。数组可能非常大(大约为 1,000,000 x 1,000,000 x 1,000,000 或更大),所以我想知道声明该大小的数组并将每个布尔值设置为 false 是否会更快,或者使用坐标键 (x, y, z) 和布尔类型的值制作地图。

根据我的计算,数组需要 O(1) 来查找或修改坐标,而映射需要 O(log n) 来查找或插入一个值。显然,对于访问值,数组更快。但是,这是否会抵消声明此类数组所需的时间?

谢谢

即使每个布尔值 1 位,数组也会占用 2**39 个字节。如果没有太多的元素将被true,我会建议set.

可以使用类来隐藏实现详细信息,并使用 1D 集。

您是否尝试过计算这样的数组需要多少内存?好多!如果点的排序很重要,请使用 std::map,如果不是,请使用 std::unordeded_map。此外,无序地图为您提供了恒定的时间插入和查找。我想某种搜索树可能是您正在寻找的(例如 k-d 树)。

假设每点使用 8 位,您将创建一个 1 EB 的数组?哇,你有很多内存!

我认为你应该重新考虑你的方法。

最新更新