繁体   English   中英

正确的数据结构以便快速插入和快速搜索?

[英]Correct data structure for fast insert and fast search?

我有一个数组,我需要尽可能快地在其中插入项目。 在添加项目之前,我需要查看它是否存在,因此我要进行全阵列扫描。 我无法使用二进制搜索,因为每次插入后都无法对数组进行排序。

这项工作是否有更有效的数据结构?

编辑 :在该数组上,我存储字符串。 在每个字符串旁边,我存储一个4字节的哈希。 我首先比较散列,如果它们相同,则字符串。

通常以( hashtable )实现的std::unordered_map将为您提供最佳的插入/搜索时间(O(1)),但不保留也不提供任何顺序。

std::map为您提供O(log(n))进行搜索和插入,因为它需要特定的顺序(而不是您必须插入的顺序),并且通常使用平衡树来实现。

如果需要排序顺序和快速(O(log n))插入/搜索,则自定义平衡搜索树是另一种选择。

如果O(n)可以接受插入时间,但您需要最小的内存占用和O(log n)搜索时间,则排序std::vector (以支持添加项的能力)是另一种选择。 由于需要复制数组的其余部分,因此您需要以O(n)的排序顺序插入项目。

如果您只需要使用数组('std :: vector'),则需要保留O(n)来进行插入/搜索,则需要保留原始顺序。

除了“ std :: vector”之外,您还可以使用单独的std::unordered_map / std::unordered_set添加“已经存在”检查,以提高速度的速度实质上是2-3倍的内存空间,并且在添加时需要更新2个结构项目。 此数组+哈希表组合将为您提供O(n)插入和O(1)搜索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM