插入unordered_map时为bad_alloc

时间:2019-04-15 04:01:15

标签: c++ gcc g++

在最近的项目中,使用了stl unordermap。当存储在映射中的键的数量增加到6倍-7倍甚至8倍时,unordermap的insert接口的性能就会出现严重的瓶颈。随着插入元素的数量增加,在插入过程中会发生碰撞。冲突打开到某个阈值,触发了存储桶的增加,从而触发了重新哈希。打印bucket_size可以看到bucketsize一直在增加,这非常昂贵。

这是测试代码:

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 :(得分:0)

与绩效相关的问题的最佳答案是-“我们应该衡量”。

这是您的代码段的基准-http://quick-bench.com/O5rEF-B_HY9dOzAa7kLbtptUQcQ