Java 是否有理由使用string=>;的映射;索引到向量中,而不是字符串=>;对象
如果我有一个可以按名称查找的对象集合,我当然可以使用Java 是否有理由使用string=>;的映射;索引到向量中,而不是字符串=>;对象,java,c++,performance,optimization,data-structures,Java,C++,Performance,Optimization,Data Structures,如果我有一个可以按名称查找的对象集合,我当然可以使用{string=>object}映射 是否有理由将对象向量与{string=>索引一起使用到此向量}伴随映射 这些年来,我看到很多开发人员都这么做,我基本上不认为这表明开发人员对地图不熟悉,或者对其他方面感到困惑。但最近几天,我开始怀疑自己,我担心我可能会错过一个潜在的优化或其他东西,尽管我一辈子都不知道什么可以优化。没有优化。如果您仔细想想,它实际上可能会降低性能(尽管会降低几微秒)。这是因为基于向量的“解决方案”需要额外的步骤才能在向量中找
{string=>object}
映射
是否有理由将对象向量与{string=>索引一起使用到此向量}
伴随映射
这些年来,我看到很多开发人员都这么做,我基本上不认为这表明开发人员对地图不熟悉,或者对其他方面感到困惑。但最近几天,我开始怀疑自己,我担心我可能会错过一个潜在的优化或其他东西,尽管我一辈子都不知道什么可以优化。没有优化。如果您仔细想想,它实际上可能会降低性能(尽管会降低几微秒)。这是因为基于向量的“解决方案”需要额外的步骤才能在向量中找到对象,而非基于向量的解决方案则不必这样做。我可以想到一个原因: 除了按名称查找对象外,有时还希望尽可能高效地遍历所有对象。使用map+向量可以实现这一点。通过索引访问向量只需付出很小的代价,但通过迭代向量而不是映射,可以获得很大的性能改进(因为向量位于连续内存中,并且对缓存更友好)
当然,您可以使用boost::multiindex做类似的事情,但这对对象本身有一些限制。我至少可以想到几个原因:
- 由于不相关的原因,您需要保留插入顺序
- 您希望有多个映射指向向量(不同的索引)
- 并非向量中的所有项都需要由字符串指向