[英]initialize an STL `map` size
是否可以初始化STL map
大小?
我知道最后我的地图中会有多少元素,我想在一开始就分配所有必需的内存。
有几种选择:
您可以尝试使用带有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贴图(使用你在另一个容器中分配的元素,如矢量),用'hooks'装饰以在其上实现贴图功能
将std :: map与allocator一起使用,这样就可以从固定的'pool'(内存区域)中分配所有实际元素
我唯一能想到的是使用它的迭代器构造函数。 唯一的技巧是,你必须创建另一个具有所需大小的容器,并将其迭代器提供给构造函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.