我什么时候应该使用unordered_map而不是std::map

When should I use unordered_map and not std::map

本文关键字:map std unordered 什么时候      更新时间:2023-10-16

我想知道在哪种情况下我应该使用unordered_map而不是std::map。

每次我不注意元素在映射中的顺序时,我都必须使用无序映射?

map

  1. 通常使用红黑树实现
  2. 元素已排序
  3. 内存使用量相对较小(哈希表不需要额外的内存)
  4. 相对快速的查找:O(log N)

unordered_map

  1. 通常使用哈希表实现
  2. 元素未排序
  3. 需要额外的内存来保存哈希表
  4. 快速查找O(1),但恒定时间取决于哈希函数,该函数可能相对较慢。还要记住,你可能会遇到生日的问题

比较哈希表(undorded_map)和二进制树(map),记住CS类并进行相应调整。

散列映射在查找时通常具有O(1),映射具有O(logN)。如果您需要许多快速查找,这可能是一个真正的区别。

地图保持元素的顺序,这有时也很有用。

map允许以排序的方式迭代元素,但unordered_map不允许
因此,当您需要按排序顺序遍历映射中的项目时,请使用std::map

选择其中一个的原因是性能。否则,他们只会创建std::map,因为它为您做得更多:)

当您需要对元素进行自动排序时,请使用std::map。其他时间使用std::unordered_map

请参阅SGI STL复杂性规范的基本原理。

unordered_map是O(1),但查找、插入和删除的常量开销相当高。map是O(log(n)),所以选择最适合您需要的复杂性。此外,并非所有关键点都可以放置在这两种类型的贴图中。

相关文章: