我是否有multimap <int key, int value>
或维持包含与int key对应的所有值的向量的向量的困境。
我很感兴趣,在查找某个int键的值时,它的执行速度会更快。
答案 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)
我猜你正在做过早的优化。这并不好,因为只有在使用了分析器之后才能进行优化。不要浪费时间并使用专门的容器来满足您的需求。