【发布时间】:2012-07-25 05:31:30
【问题描述】:
所以我的应用程序有包含 1 亿个甚至更多元素的容器。
我正在寻找一个容器,它在整个容器中的频繁插入和删除......包括在容器附近中间。对第 n 个元素的访问时间不需要像向量一样快,但应该比 std::list 中的完全遍历更好(无论如何每个元素都有巨大的内存开销)。
元素应按索引排序(如向量、双端队列、列表),因此 std::set 或 std::unordered_set 也不能正常工作。
在我坐下来自己编写这样一个容器之前:有人见过这样的野兽吗?我很确定 STL 没有这样的东西,寻找 BOOST 我没有找到可以使用的东西,但我可能错了。
有什么提示吗?
【问题讨论】:
-
喜欢这个话题,因为我曾经编写过 32GiB 和更大的数据集(例如用于地形渲染的四叉树)(带有内存映射)。但我必须问“你已经看过什么了”:)
-
请注意,对于中间的操作,vector 的性能比 deque 更好...尤其是如果您最初添加
reserve(100 million)。 -
@phresnel 我查看了容器描述中的 STL 和 Boost (v1.50) 是否其中一个容器声称拥有我需要的东西,但运气不好。
-
@BoPersson 是的,确实如此。但是在插入时,双端队列更快,在容器的前 40% 中删除。我曾经对一个 50m 的元素容器进行基准测试,随机插入和删除,但在每个位置一次。由于末端不断插入/删除的额外好处,差异小到足以让我接受双端队列。
-
@BaCh:顺便说一句,1 亿并不是一个大数字,这只是 95 兆。这些元素实际上有多大?
标签: c++ boost stl containers large-data