我有一个带有这个结构的向量:
struct AB
{
int id, x, y;
}
x和y是坐标。 向量中的数据如下所示:
你可以看到一些id包含多个坐标。因此,我正在寻找一种以不同形式保存数据的方法。哪个更适合进一步处理数据。有人提示吗?
答案 0 :(得分:0)
这完全取决于您如何填写和使用数据。如果只是在开始时一次性加载所有数据然后仅使用加载的数据,那么保持向量,加载所有数据,根据id对其进行排序然后使用已排序的数据实际上是有益的。 vector - 因为连续的块具有更好的局部性,因此具有更好的缓存行为(与有序或无序的映射结构相反,这意味着在整个地方追逐指针,这对缓存不是很友好)。如果仅很少添加新项目,这也可以起作用。请注意,这将具有与具有平衡的基于树的地图相同的大O(如果您将在排序的向量中进行二分搜索),只要在排序后不需要添加新项目。
如果经常添加新项目,您可以使用std :: multimap(或基于散列工作的无序),或者点矢量的map / unordered_map。
哪一个更适合您的决定应基于当前速度的测量和更改后的速度(您通常不希望“改进”版本比原始速度慢)。