大堆栈和sparsehash表现缓慢

时间:2013-06-12 20:11:32

标签: c++ hashset

我有一大堆无符号长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;
    }
}

我在实施中做错了什么,或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您是否将性能与gcc hash_set进行了比较?

哈希容器使其大小加倍并在加载因子变高(如0.5)时复制所有内容。既然你已经知道你的hashset要保存多少个元素(我猜你的堆栈大小),那么在开始插入之前尝试保留那些很多桶。这样你就可以避免重新哈希并获得显着的加速。