享受两个世界:矢量具有列表的插入/擦除效率

时间:2010-08-02 21:31:54

标签: c++ stl

我需要一个容器,它给我一个快速的索引器,并且在任意插入和删除操作(意味着在容器的任何位置)也非常有效。

我记得读过这样一个使用水桶的容器,但我似乎无法找到它或回溯引导我的步骤(我将开始使用书签,保证!)

谢天谢地。

3 个答案:

答案 0 :(得分:4)

您可能正在寻找某种哈希映射,例如boost::unordered_map(很快就会出现在C ++标准中)。那里有很多其他的哈希实现。

答案 1 :(得分:1)

您正在寻找std :: deque,它在许多(但不是全部)情况下超出std :: list时需要插入除结尾之外的其他位置。它使用“桶”来执行此操作,并支持随机访问。实际上,对于任何标准库容器,您需要根据应用程序的使用情况来测试其性能 - 我们无法预测哪些是最佳的。

答案 2 :(得分:0)

我需要这种容器用于我写的稀疏矢量容器,我不能使用map<>因为它需要太多的内存(向量不是那么稀疏)。

我最终使用compressed bit vector。每个枚举值都有自己的位向量,这很好。

我仍然希望能找到一个有效的矢量/列表混合,在随机访问时为O(1),在擦除/插入时至少为O(log N)。