是否可以初始化 STLmap
大小?
我知道最后我的地图中有多少元素,我想在一开始就分配所有需要的内存。
有几种选择:
您可以尝试将 map 与 statefull 分配器一起使用。例如来自Boost.Container或来自 C++11。或者,如果您接受无状态分配器的限制,那么您甚至可以使用 C++98/03 中的 map。
考虑使用 unordered_map(同样来自 Boost 或 C++11)——它将桶数作为构造函数参数。它与 map 的不同之处在于它基于散列而不是严格的弱排序。
另一种选择是来自Boost的 flat_map 。它具有保留成员功能。平面地图/套装说明:
Boost.Container flat_[multi]map/set 容器是基于 Austern 和 Alexandrescu 指南的基于有序向量的关联容器
哪个选择更好 - 取决于您的使用模式。
你不能。它是一棵树(通常是红黑树)。实际值将决定内存布局。
但是,您可以
使用Boost Intrusive地图(使用您在另一个容器中分配的元素,如矢量),用“钩子”装饰以在其上实现地图功能
将 std::map 与分配器一起使用,因此您可以从固定的“池”(内存区域)分配所有实际元素
我唯一能想到的就是使用它的迭代器构造函数。唯一的窍门是,您必须创建另一个具有所需大小的容器,并将其迭代器提供给构造函数。