带结构的c ++向量映射?

时间:2017-07-20 12:17:21

标签: c++ vector struct stdmap

我有一个带有这个结构的向量:

struct AB
{
      int id, x, y;
}

x和y是坐标。 向量中的数据如下所示:

  1. id 22 x 53.2 y 8.90
  2. id 22 x 53.3 y 8.91
  3. id 25 x 53.4 y 8.92 ...
  4. 你可以看到一些id包含多个坐标。因此,我正在寻找一种以不同形式保存数据的方法。哪个更适合进一步处理数据。有人提示吗?

1 个答案:

答案 0 :(得分:0)

这完全取决于您如何填写和使用数据。如果只是在开始时一次性加载所有数据然后仅使用加载的数据,那么保持向量,加载所有数据,根据id对其进行排序然后使用已排序的数据实际上是有益的。 vector - 因为连续的块具有更好的局部性,因此具有更好的缓存行为(与有序或无序的映射结构相反,这意味着在整个地方追逐指针,这对缓存不是很友好)。如果仅很少添加新项目,这也可以起作用。请注意,这将具有与具有平衡的基于树的地图相同的大O(如果您将在排序的向量中进行二分搜索),只要在排序后不需要添加新项目。

如果经常添加新项目,您可以使用std :: multimap(或基于散列工作的无序),或者点矢量的map / unordered_map。

哪一个更适合您的决定应基于当前速度的测量和更改后的速度(您通常不希望“改进”版本比原始速度慢)。