是否有理由使用string =>的映射?索引到一个向量,而不是string =>宾语?

时间:2015-02-18 01:11:10

标签: java c++ performance optimization data-structures

如果我有一组我希望能够按名称查找的对象,我当然可以使用{ string => object }地图。

是否有理由使用 vector 对象和{ string => index into this vector }随播广告?

多年来我见过许多开发人员这样做了,我基本上认为这表明开发人员不熟悉地图,或者其他方面感到困惑。但是最近几天,我开始自我猜测,我担心我可能会错过一个潜在的优化或者某些东西,尽管我不能为我的生活找出可以优化的东西。

3 个答案:

答案 0 :(得分:6)

我能想到一个原因:

除了按名称查找对象外,有时您还希望尽可能高效地遍历所有对象。使用map + vector可以实现这一点。通过索引访问向量会花费很小的代价,但是通过迭代向量而不是映射可以获得很大的性能提升(因为向量在连续内存中并且更加缓存友好)。

当然你可以使用boost :: multiindex做类似的事情,但这对对象本身有一些限制。

答案 1 :(得分:2)

我至少可以想到几个原因:

  • 由于无关原因,您需要保留广告订单。
  • 您希望将多个地图指向矢量(不同的索引)。
  • 并非所有向量中的项都需要用字符串指向。

答案 2 :(得分:0)

没有优化。如果你考虑一下,它实际上可能会降低性能(尽管有几微秒纳秒)。这是因为基于矢量的“解决方案”需要额外的步骤才能在矢量中找到对象,而非基于矢量的解决方案则不需要这样做。