有几种选择:
您可以尝试使用带有statefull分配器的map.例如,来自Boost.Container或来自C++ 11.或者,如果您接受非statefull分配器的限制,那么您甚至可以使用C++ 98/03中的map.
考虑使用unordered_map(同样来自Boost或C++ 11) - 它需要将桶计为构造函数参数.它与map不同,因为它基于散列而不是严格的弱排序.
Boost.Container flat_ [multi] map/set容器是基于Austern和Alexandrescu指南的基于有序矢量的关联容器
哪种选择更好 - 取决于您的使用模式.
你不能。它是一棵树(通常是红黑树)。实际值将决定内存布局。
不过,您可以
使用Boost Intrusive映射(使用您在另一个容器中分配的元素,如向量),用“钩子”装饰来实现其上的映射功能
将 std::map 与分配器一起使用,因此您可以从固定的“池”(内存区域)分配所有实际元素