8
A
回答
6
有几种选择:
您可以尝试使用地图有状态的分配器。例如从Boost.Container或从C++ 11。或者,如果您接受非状态分配器的限制,那么您甚至可以使用C++ 98/03中的映射。
考虑使用unordered_map(再次来自Boost或C++ 11) - 它需要将存储区计为构造函数参数。它不同于map,因为它基于散列而不是严格的弱排序。
另一种选择是Boost的flat_map。它具有储备成员函数。平坦映射/套Description:
基于Austern的Boost.Container flat_ [多]地图/组容器是基于有序向量关联容器和Alexandrescu的的准则
- 或者,如果boost不可用 - 那么你可以简单地使用std :: vector + std :: sort + std :: lower_bound(或者像class一样将它们包装到小的flat_map中)。即只需将元素放入向量(无序),然后对其进行排序,然后 - 当需要通过键查询元素时 - 只需使用lower_bound即可。
哪个选择更好 - 取决于您的使用模式。
+1
+1 for flat_map。 – ildjarn
4
你不能。这是一棵树(通常是红黑色的树)。实际值将决定内存布局。
然而,你可以
使用Boost Intrusive地图(其使用在另一容器中分配,就像一个向量的元素),缀以“挂钩”,实现对地图功能它
使用std :: map与分配器,所以你可以分配所有的实际元素从一个固定的'池'(内存区域)
0
1
我能想到的唯一的事情就是用它的迭代器的构造函数。唯一的窍门是,那么你必须创建另一个具有所需大小的容器,并将其迭代器赋予构造函数。
相关问题
- 1. 初始化大小
- 2. std :: map初始化std :: vector
- 3. 用Java初始化Map,Hashmap
- 4. 初始化后获得UIElement的大小
- 5. 初始化散列表的大小
- 6. 初始化未知大小的数组
- 7. 初始化具有可变大小的
- 8. 未初始化列表的大小C#
- 9. 初始化stl valarray在一行
- 10. 如何初始化类的指针(STL)
- 11. 初始化STL优先队列
- 12. STL容器的默认初始化
- 13. STL独立初始化列表
- 14. 初始化STL类与模板参数
- 15. 如何为reference_wrapper的STL容器设置初始大小?
- 16. 在Spring Map中懒洋初始化bean
- 17. 在AngularJS中初始化Google Map
- 18. C++ map <K,T>初始化
- 19. 初始化后std :: map change key_comp
- 20. 如何初始化静态std :: map?
- 21. android map初始化时发生错误
- 22. 初始化std :: map中的原始类型的值是否已初始化?
- 23. 初始窗口大小/调整大小
- 24. Sharepoint Collaboration Portal初始大小
- 25. 初始Tomcat 5.5堆大小
- 26. ByteBuf初始容量大小
- 27. UIscrollview初始图像大小
- 28. 初始大小的BasicDataSource
- 29. 小初始化问题
- 30. 初始化dojo小部件
你有哪些使用模式?你有删除吗?或者它只是初始填充,然后没有改变的使用? –
我需要用零初始化,然后递增。 – MBZ