如何在地图中存储数组索引

时间:2014-02-10 21:43:31

标签: c++ boost map

我的程序经常使用boost :: unordered_map,地图有大约4000万个条目。该程序不经常插入或删除。它只是使用密钥随机访问条目。

我想知道如果我将条目值(每个大约1 KB)存储在一个平面数组(可能是std :: vector)中,它会改善性能(就访问条目的速度而言),以及我使用boost :: unordered_map存储键到这个数组索引的映射。

谢谢, 崔

2 个答案:

答案 0 :(得分:2)

是的,这可能会严重加快速度。事实上,这就是Boost flat_map的用途:)

文档涉及:Non-standard containers

  

使用排序向量而不是基于树的关联容器是C ++世界中众所周知的技术。 Matt Austern的经典文章 Why You Shouldn't Use set, and What You Should Use Instead (C++ Report 12:4, April 2000, PDF) 具有启发性:

     

...

这比你要求的更多,因为你甚至不需要无关的索引。这为您提供了更多的引用位置和更低的内存占用。最重要的是,它在界面方面为您提供了较低的复杂性( - >更少的错误)和std::[unordered_]map的直接替代。

答案 1 :(得分:0)

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

如果你的狩猎表现,请记住黄金法则: 总是衡量!