我有一大堆无符号长long(100M +),我试图将其放入SparseHash,但性能非常慢,因为对于每1k条目,在MacBook Pro上需要大约4-6秒16Gb的RAM。
while (stackUI.size()>0) {
Set.insert(stackUI.top());
stackUI.pop();
if (stackUI.size()%1000==0) {
cout<<stackUI.size()<<" "<<time(0)<<endl;
}
}
我在实施中做错了什么,或者有更好的方法吗?
答案 0 :(得分:0)
您是否将性能与gcc hash_set进行了比较?
哈希容器使其大小加倍并在加载因子变高(如0.5)时复制所有内容。既然你已经知道你的hashset要保存多少个元素(我猜你的堆栈大小),那么在开始插入之前尝试保留那些很多桶。这样你就可以避免重新哈希并获得显着的加速。