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

时间:2011-05-30 08:18:41

标签: c++ hashmap

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

每次我不注意地图中元素的顺序时,我必须使用unorderd_map吗?

5 个答案:

答案 0 :(得分:18)

map

  1. 通常使用red-black tree实现。
  2. 元素已排序。
  3. 内存使用量相对较小(哈希表不需要额外的内存)。
  4. 相对较快的查找:O(log N)。
  5. unordered_map

    1. 通常使用hash-table实现。
    2. 元素未排序。
    3. 需要额外的内存来保留哈希表。
    4. 快速查找O(1),但是恒定时间取决于可能相对较慢的hash-function。另请注意,您可以使用Birthday problem

答案 1 :(得分:1)

比较哈希表(undorded_map)与二叉树(map),记住你的CS类并相应调整。

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

你选择一个而不是另一个的原因是性能。否则他们只创建了std::map,因为它为你做了更多:)

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

请参阅the SGI STL Complexity Specifications rationale

答案 4 :(得分:0)

unordered_map是O(1)但是查找,插入和删除的常量开销很高。 map是O(log(n)),因此选择最适合您需求的复杂性。此外,并非所有键都可以放入两种地图中。