我有一大堆未签名的long long's (100M+),我正试图将其放入SparseHash中,但性能非常慢,因为对于每1k个条目,在内存为16 it的MacBook Pro上需要大约4-6秒。
while (stackUI.size()>0) {
Set.insert(stackUI.top());
stackUI.pop();
if (stackUI.size()%1000==0) {
cout<<stackUI.size()<<" "<<time(0)<<endl;
}
}
是我在我的实现中做错了什么,还是有更好的方法来解决这个问题?
发布于 2013-06-13 04:27:55
你有没有把它的表现和gcc hash_set做过比较?
当负载因子变高(如0.5)时,散列容器会将其大小加倍并复制所有内容。既然您已经知道您的hashset将包含多少元素(我猜是您的堆栈大小),那么在开始插入之前,请尝试保留这些存储桶。这样,您将避免重新散列,并获得显着的加速。
https://stackoverflow.com/questions/17074442
复制相似问题