【发布时间】:2022-01-08 16:48:45
【问题描述】:
我正在阅读有关 C++ unordered_map 的内容,并且有一些我无法清楚回答的问题。
我注意到 unordered_map 为每个索引放置一个元素而不是多个(可以使用其中一种方法来实现哈希表,以解决映射到同一索引的 2 个元素)
-
如果地图中有一个键为 A 的元素,我插入另一个元素,它会覆盖前一个元素,对吗? (无论值是否匹配)。
-
是否有一个选项可以更改 unordered_map 的行为,以便它可以像我上面解释的那样在每个索引中包含多个元素?
-
我从我的代码中注意到,unordered_map 每次插入一个新元素时都会变大,但这真的很糟糕,我在哈希表中了解到,每次需要它时,我们都需要将大小乘以 2,因此插入的复杂性是O(1) 摊销而不是 O(n)。
-
我怎样才能给我的 unordered_map 一个初始大小但没有元素?即我知道它会达到 1000 的大小,所以我们可以直接做,而不是让它变大多次并进行大量复制。
【问题讨论】:
-
2:检查 std::multimap。 3. 你是否混淆了桶数和元素数? 4. 你检查过文件吗?
reserve成员函数就是这样做的。 -
@Passerby for 3 我用了size,我怎么知道你说的每一个的个数?
-
您需要的一切都在en.cppreference.com/w/cpp/container/unordered_map。对于您的第一个问题,您可以查找
insert。对于您的第三个,您可以查看bucket_count。
标签: c++ hash hashtable std unordered-map