gpt4 book ai didi

c++ - 在开始时使用所有可用数据构建大型(ish)无序集

转载 作者:太空狗 更新时间:2023-10-29 20:09:39 25 4
gpt4 key购买 nike

我有一种情况需要优化无序集的创建。预期的元素数量约为 5-25M。我的第一个想法是我应该事先准备好所有数据并做一些类似

的事情
unordered_set s(data); 

代替

for (auto& elem : data)
s.insert(elem);

STL无序集是否可以使用批量加载的方式加速创建?如果我在构建表之前知道预期的元素数量,我该如何调整哈希表的参数(桶大小等)?

最佳答案

这个问题很宽泛也很有趣。

首先,有一个特殊的方法叫做reserve - 它允许您在实际插入之前为许多元素预分配存储空间。预先分配足够的内存(并避免在插入期间重新定位)是一种非常强大的方法,通常用于大型数据集。请注意,它也可用于各种标准容器,包括 vectorunordered_map 等。

其次,如果您使用的是 C++11,则在将元素插入容器时使用移动语义可能会受益(当然,假设一旦将它们放入集,这对于 5 到 2500 万个对象应该是正确的)。

这两项技术是一个好的开始。您可能需要通过设置不同的哈希函数,甚至选择 unordered_set 的不同实现来进一步调整它。但此时,您应该提供更多信息:您的值(value)对象是什么,它们的生命周期是什么;您认为您的应用程序可以接受什么插入时间。

编辑:当然这都是关于 C++11 的,因为在此之前 unordered_set 不可用。我真丢人:)

关于c++ - 在开始时使用所有可用数据构建大型(ish)无序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44577329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com