hash_map基于哈希表。哈希表最大的优点:数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间;而代价仅仅是消耗比较多的内存。然而在当前可利用内存越来越多的 情况下,用空间换时间的做法是值得的(典型的空间换时间)。另外,编码比较容易也是它的特点之一。
hash_map,首先分配一大片内存,形成许多桶。是利用hash函数,对key进行映射到不同区域(桶)进行保存。其插入过程是: 得到key 通过hash函数得到hash值 得到桶号(一般都为hash值对桶数求模) 存放key和value在桶内。 其取值过程是: 得到key 通过hash函数得到hash值 得到桶号(一般都为hash值对桶数求模) 比较桶的内部元素是否与key相等,若都不相等,则没有找到。 取出相等的记录的value。 hash_map中直接地址用hash函数生成,解决冲突用比较函数解决。这里可以看出,如果每个桶内部只有一个元素,那么查找的时候只有一次比较。当许多桶内没有值时,许多查询就会更快了(指查不到的时候). 由此可见,要实现哈希表, 和用户相关的是:hash函数和比较函数。这两个参数刚好是我们在使用hash_map时需要指定的参数。
实例:
#include <hash_map> #include <string> #include<iostream> using namespace std; int main() { hash_map<int, string> mymap; mymap[9527] = "小五哥哥"; //插入 mymap[1000000] = "诗和远方"; mymap[10000] = "海子和歌"; mymap.insert(make_pair(1, "战斗龙卷风")); //插入 hash_map<int, string>::iterator iter = mymap.find(10000); //查找 if (iter != mymap.end()){ cout << iter->second << endl; } cout << mymap.size() << endl; //哈希表中元素个数 return 0; } 总结:其实hash_map和map的接口用法一致和hash_map使用方法相同