В недавних проектах используется stor unordermap. Когда количество ключей, хранящихся на карте, увеличивается в 6-7 раз или даже в 8 раз, производительность интерфейса вставки unordermap серьезно ограничивается. Поскольку количество вставленных элементов увеличивается, столкновение происходит во время процесса вставки. Столкновение открывается до определенного порога, вызывая увеличение объема, что вызывает перефразировку. Печать bucket_size позволяет увидеть, что размер buckets_size увеличивается, что очень дорого.
Вот код теста:
int main() {
std::unordered_map<int, int> t;
for (int i = 0; i <= 10000000; ++i) {
t.insert(make_pair(i, 1));
}
}
Стоит ли использовать количество зарезервированных элементов для повышения производительности?
t.reserve(10000000)