原理简介
首先map和hash_map都是关联容器,能够实现数据的一对一映射,但是两者在实现上有很大的区别,map的内部机制是红黑树,红黑树是一种特殊的平衡二叉树,所以map中数据查找效率是logn级别的,但是其空间利用率接近100%,也即map开辟的空间中没有不利用的空间。而hash_map本质上是散列表,所以其映射关系是由一个内部的映射函数实现的,也即其实数学中的函数映射,由于函数映射过程中可能产生不同的输入值对应相同的解,所以hash_map中可能会产生散列冲突现象,所以为了避免这种现象,散列表和散列函数都要涉及的足够巧妙,并且其结构对于数据是非常敏感的,散列函数较差的散列表可能冲突较多,且实际空间利用率很低。
STL用法
hash_map和unordered_map这两个的内部结构都是采用哈希表来实现。区别在哪里?unordered_map在C++11的时候被引入标准库了,而hash_map没有,所以建议还是使用unordered_map比较好。unordered_map的头文件是#include <unordered_map>,hash_map的头文件是#include <hash_map>
map用法
unordered_map用法
成员方法 | 功能 |
---|---|
begin() |