如果我有一组我希望能够按名称查找的对象,我当然可以使用{ string => object }
地图。
是否有理由使用 vector 对象和{ string => index into this vector }
随播广告?
多年来我见过许多开发人员这样做了,我基本上认为这表明开发人员不熟悉地图,或者其他方面感到困惑。但是最近几天,我开始自我猜测,我担心我可能会错过一个潜在的优化或者某些东西,尽管我不能为我的生活找出可以优化的东西。
答案 0 :(得分:6)
我能想到一个原因:
除了按名称查找对象外,有时您还希望尽可能高效地遍历所有对象。使用map + vector可以实现这一点。通过索引访问向量会花费很小的代价,但是通过迭代向量而不是映射可以获得很大的性能提升(因为向量在连续内存中并且更加缓存友好)。
当然你可以使用boost :: multiindex做类似的事情,但这对对象本身有一些限制。
答案 1 :(得分:2)
我至少可以想到几个原因:
答案 2 :(得分:0)
没有优化。如果你考虑一下,它实际上可能会降低性能(尽管有几微秒秒>纳秒)。这是因为基于矢量的“解决方案”需要额外的步骤才能在矢量中找到对象,而非基于矢量的解决方案则不需要这样做。