bad_alloc при вставке в unordered_map - PullRequest
0 голосов
/ 15 апреля 2019

В недавних проектах используется 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)

1 Ответ

0 голосов
/ 15 апреля 2019

Лучший ответ на вопрос, связанный с производительностью, - «мы должны измерить».

Вот тест для вашего фрагмента кода - http://quick -bench.com / O5rEF-B_HY9dOzAa7kLbtptUQcQ

...