C++ 将数组索引存储在映射中如何

C++ 将数组索引存储在映射中如何,c++,boost,map,C++,Boost,Map,我的程序经常使用boost::unordered_映射,该映射有大约4000万条条目。这个程序不经常进行插入或删除操作。它只是使用键随机访问条目 我想知道,如果我将我的条目值(每个大约1KB)存储在一个平面数组(可能是一个std::vector)中,并使用boost::unordered_映射来存储索引到该数组的键映射,那么它是否会提高性能(在访问条目的速度方面) 谢谢, 崔是的,这会大大加快事情的发展。事实上,这就是Boostflat\u map的作用:) 这些文件涉及: 使用排序向量代替基于

我的程序经常使用boost::unordered_映射,该映射有大约4000万条条目。这个程序不经常进行插入或删除操作。它只是使用键随机访问条目

我想知道,如果我将我的条目值(每个大约1KB)存储在一个平面数组(可能是一个std::vector)中,并使用boost::unordered_映射来存储索引到该数组的键映射,那么它是否会提高性能(在访问条目的速度方面)

谢谢,

是的,这会大大加快事情的发展。事实上,这就是Boost
flat\u map
的作用:)

这些文件涉及:

使用排序向量代替基于树的关联容器是C++世界中的一种众所周知的技术。马特·奥斯特恩的经典文章很有启发性:


这会给你比你要求的更多,因为你甚至不需要额外的索引。这将为您提供更多的引用位置和更低的内存占用。最重要的是,它降低了复杂度(->减少了bug),并在接口方面减少了对
std::[unordered_uu2;]map
的替换。

像std::vector提供的那样将值存储在连续内存中,将增加缓存的局部性。这可能会在性能上产生很大的差异,但这取决于访问模式

如果你的狩猎表现不佳,请记住黄金法则:
永远测量

也许吧。每次你想找到索引时,你会使用无序的_图吗?因为如果是这样的话,这将比仅仅一个
无序的地图本身要慢。如果没有,则在无序的_映射中使用迭代器,而不是索引。@MooingDuck没有。OP也不想使用树…:)当然,您提出了一个有效的观点,尽管该路径将导致Boost侵入式(可能是
multi_index_容器)