【发布时间】:2015-02-02 01:09:29
【问题描述】:
所以这是一个思想实验。我想要大量的结构,例如:
struct
{
KeyType key;
ValueType value;
}
而且我需要通过键快速访问并快速插入新值。
我不会使用 std::map 因为它对于一个结构有太大的内存开销,而对于大量数据来说它可能是巨大的。对吧?
所以接下来我会考虑使用排序的 std::vector 和 binary_search。搜索很好,但是向向量添加新值会太慢。想象一下,您需要在排序数组的开头添加一个新值,您必须将数据向右移动 aaaaaAAAALOT!
如果我使用双端队列会怎样?据我所知,push_back/push_front 有 O(1),但插入仍然有 O(n)(因为无论如何它都必须移动数据,但数据更少)。
问题是:
1) 在实际情况下,在双端队列中插入数据的 O(n) 是否比在向量中的 O(n) 快得多?
2) 当你向 Deque 插入一个值并且它应该进入的存储桶已满时会发生什么?
3) 如果您需要存储大量数据并需要两个快速操作:搜索和插入,是否还有另一种更可取的容器类型?
谢谢!
【问题讨论】:
-
首先按类型指定搜索类型以及预期成员和操作的计数:插入、删除、搜索(不同类型 - 第九旧、精确键、最近键...)
-
虽然时间复杂度很重要,但内存层次结构也可以支配性能。理论分析只能缩小我们的选择范围。测量是确定选择哪一个的唯一实用方法。
标签: c++ algorithm vector deque