矢量或多图困境

时间:2011-09-08 09:53:54

标签: c++ stl

我是否有multimap <int key, int value>或维持包含与int key对应的所有值的向量的向量的困境。

我很感兴趣,在查找某个int键的值时,它的执行速度会更快。

5 个答案:

答案 0 :(得分:4)

如果您想要multimap而不仅仅是map,替代方案可能是vector< list<int> >或类似的东西(实际上multimap或多或少是具有map元素类型的list

一般情况下,vector查询速度更快:数组的O(1)与地图的O(log n)相比(在这两种情况下我都没有计算搜索{{1} } / list / vector /用于“多”部分的任何内容)。 但是,要使用set,您必须使其与您要使用的最大vector密钥一样大;如果您的密钥是连续的,这不是问题,但如果您的索引稀疏,int可能是更好的选择。

另一方面,如果你不需要有序遍历,multimap(实际上是一个哈希表)可能是两个世界中最好的:你得到类似数组的unordered_multimap查找必须保持一个巨大的空阵列。

答案 1 :(得分:4)

忘记“更快”。您可以稍后对其进行分析,但不要对此感到困惑。更重要的是,一种方法可以为您提供稀疏存储,而另一种方法则不会 - 专注于此并确定哪种方法最适合您的问题。

答案 2 :(得分:2)

我想说如果你的按键是顺序的,请使用向量,但如果你的按键上有大洞,那么地图会更好(因为你不必像你的向量那样存储“空”记录),加上它可以更容易计算你有多少记录等。 性能明智的向量基于数组,因此查找通常更快(因为地图必须经过一些数据才能进行查找)。

答案 3 :(得分:1)

我建议map<int, vector<int>>

因为一旦你在地图中完成了搜索,就会得到一个包含所有值的向量。

否则,您的解决方案将需要对每个值进行新搜索

答案 4 :(得分:1)

我猜你正在做过早的优化。这并不好,因为只有在使用了分析器之后才能进行优化。不要浪费时间并使用专门的容器来满足您的需求。