C++中hash_map和map接口简介

1.hash_map的使用

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的接口用法一致

2.map的使用

和hash_map使用方法相同

3.两者的对比

  1. hash_map用hash表实现的,而map是用红黑树实现
  2. hash_map不是标准库的,而map是,若考虑移植性,应该少用hash_map
  3. c++11中纳入了unordered_map(内部也是hash实现),推荐用此容器替代hash_map
  4. 哈希表的好处:查询平均时间O(1),坏处,数据之间无顺序
  5. map保证了一个稳定的动态操作时间,查询、插入、删除的最坏和平均时间都是O(logN),内部本身就是按序存储
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五癫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值