两个示例代码,第一个test函数是map,第二个是unorder_map

关联容器map和无序关联容器unordered_map

test()的结果:

关联容器map和无序关联容器unordered_map

unorderTest()的结果:

关联容器map和无序关联容器unordered_map

可以看到,关联容器map是按字母顺序输出的,而无序关联容器unordered_map则是不太可能按字母顺序输出的,但对于相同的输入,其输出还是相同的。

 

无序关联容器unordered_map的基本的 插入、查找等操作跟有序关联容器map一样。

  •   无序容器 在存储上组织为一组桶。使用一个哈希函数将元素映射到桶。每个桶保存0个或多个元素。无序容器的性能依赖于哈希函数的质量和桶的数量和大小。
  • 关联容器map和无序关联容器unordered_map

无序容器unordered_map对桶的操作:

关联容器map和无序关联容器unordered_map

 

遍历桶

代码入下:

       关联容器map和无序关联容器unordered_map

输出如下:

      关联容器map和无序关联容器unordered_map

观察哈希函数对关键字的映射后的值

因为元素与桶之间的映射是根据 经过哈希函数处理过的 哈希值来得到的,可以利用默认的哈希函数来观察元素关键字被哈希函数映射后的值:

  关联容器map和无序关联容器unordered_map

输出如下:

关联容器map和无序关联容器unordered_map

从输出可以看出,虽然元素很少,但第三个桶有两个元素,这个哈希函数并不适合这所给的这几个元素值。

关键字为自定义类类型的无序容器的哈希函数:

重载==操作符, 自定义哈希函数

   关联容器map和无序关联容器unordered_map

 

伪代码如下:

 

    关联容器map和无序关联容器unordered_map

  

从下图的声明可知,如果第三个参数不是用自定义的哈希函数,则会调用系统默认的哈希函数,在元素值是内置的类型时就可以使用这个默认的哈希函数。

关联容器map和无序关联容器unordered_map

相关文章: