У меня есть большой стек беззнаковых длинных длинных (100M +), которые я пытаюсь вставить в SparseHash, но производительность очень низкая, так как для каждых 1К записей это занимает ~ 4-6 секунд на MacBook Pro с 16 ГБ оперативной памяти ,
while (stackUI.size()>0) {
Set.insert(stackUI.top());
stackUI.pop();
if (stackUI.size()%1000==0) {
cout<<stackUI.size()<<" "<<time(0)<<endl;
}
}
Я делаю что-то не так в своей реализации, или есть лучший подход к этому?
Вы сравнивали производительность с gcc hash_set?
Хэш-контейнеры удваивают свои размеры и копируют все, когда коэффициент загрузки становится высоким (например, 0,5). Поскольку вы уже знаете, сколько элементов будет содержать ваш хэш-сет (размер вашего стека, я думаю), попробуйте зарезервировать эти много сегментов, прежде чем начинать вставку. Таким образом вы избежите повторного хеширования и получите значительное ускорение.
Других решений пока нет …