带有结构映射的 C++ 向量?

c++ vector with struct to map?

本文关键字:C++ 向量 映射 结构      更新时间:2023-10-16

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

struct AB
{
int id, x, y;
}

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

  1. 内径 22 x 53.2 y 8.90
  2. 内径 22 x 53.3 y 8.91
  3. 内径 25 x 53.4 y 8.92 ...

您可以看到某些 id 包含多个坐标。因此,我正在寻找一种以不同形式保存数据的方法。哪个更适合进一步处理数据。有人给小费吗?

这完全取决于您如何填写和使用数据。如果一开始就一次性加载所有数据,然后只使用加载的数据,那么保留向量,加载所有数据,根据 ids 对其进行一次排序,然后使用排序后的向量实际上是有益的 - 因为连续块具有更好的局部性,因此更好的缓存行为(与暗示到处追逐指针的有序或无序映射结构相反这个地方,不是很适合缓存(。如果很少添加新项,这也行得通。请注意,只要排序后不需要添加新项目,这将具有与平衡的基于树的映射相同的 big-O(如果您要在排序向量中进行二叉搜索(。

如果经常添加新项目,则可以使用 std::multimap(或基于哈希工作的无序(,或点向量的映射/unordered_map。

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