【发布时间】:2015-05-27 10:19:45
【问题描述】:
我有一个大小为(90,000 * 9,000) 的vector<unsigned>。我需要多次查找该向量中是否存在元素?
为此,我使用std::sort() 以排序形式存储向量,然后使用std::binary_search() 在向量中查找元素。但是在使用perf 进行分析时,我发现在vector<unsigned> 中查找元素是最慢的操作。
有人可以在C/C++ 中建议一些data-structure,我可以用它来有效地查找(90,000 * 9,000) 元素向量中的元素。
我只执行一次插入(批量插入)。其余时间我只执行查找,所以这里的主要开销是查找。
【问题讨论】:
-
你是否多次寻找同一个元素?如果是这样,您可以缓存结果。
-
向量有什么类型的数据?
-
为了提供有意义的答案,我们需要知道其他限制条件——例如。插入(如果使用,删除)操作的预期性能。
-
如果您能以这种方式组织数据,那么 trie 应该会更快。
-
二分查找最多需要 log_{2}(81e7) ~= 30 步。你确定尺寸是你的问题吗?