# C++关于哈希(hash)详讲

# C++关于哈希(hash)详讲

关联容器的类型

关联容器中的元素是按照关键字来保存和访问的。

在这里插入图片描述

1、set、map的基础概念

1、map是关键字-值对的集合。set是关键字的简单集合。

2、set、map都是有序容器,红黑树实现的。

3、map、set中的关键字都是唯一的,既,对于一个给点的关键字,只能有一个元素的关键

字等于它(具有去重的功能)。不能插入相同关键字的内容。

4、key_type 此容器类型的关键字类型

​ mapped_type 每个关键字关联的类型:只适用map

​ value_type 对于set,与key_type相同,对于map,为pair<const key_type,mapped_type>

对于set 类型,key_type和value_type是一样的;set保存的值就是关键字。对于map,元素是

关键字-值对。即,每个元素是一个pair对象,包含一个关键案子和一个关联的值。

5、maphash,pair是一个模板类型,保存两个名为first和second成员的数据成员。map所使用的

pair用first成员保存关键字,用second1成员保存对应的值。

2、unordered_set、unordered_map的基础概念

1、unordered_set、unordered都是无序容器、底层是哈希函数实现的。

2、无序容器再存储上组织为一组桶,每个桶保存零个或多个元素。无序容器使用hash函数将函数映射到桶上。为了访问一个元素,容器首先计算元素的哈希值,它指出应该搜索哪个桶,桶里存放这相同关键字的元素。

3、其余的大多于set和map相同。

3、常见哈希函数

1、直接定址法
缺点:需要事先知道关键字的分布情况。使用场景:适合查找比较小且连续的情况

2、除留余数法
设散列表中允许的地址数为m,取一个不大于m,但最接近或者等于m的质数p作为除数,按照哈希函
数:Hash(key) = key% p(p<=m),将关键码转换成哈希地址

4、unordered_Set 的基本操作

unordered_map的操作几乎相同

 //哈希表
class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
       unordered_set<ListNode*>hash; //定义一个unordered_set
       ListNode*cur=head;
       int i=0;
       while(cur!=NULL&&i<4)
       {
          hash.insert(cur);//向hash插入数据操作
          cur=cur->next;
          i++;
       }
        //hash.erase(cue)删除操作
        //hash.find(cur)查找操作,如果找不到就返回hash.end();
       unordered_set<ListNode*>::iterator it=hash.begin(); //定义一个hash迭代器
       //auto it=hash.begin()//另一种简介方法
       while(it!=hash.end())
       {
           cout<<*it<<" ";
           it++;
       }
       return head;
    }
};                   

本文章为个人见解,可能会有错误的地方,欢迎指出

参考文章:C++ primer 第五版、http://t.csdn.cn/N0Amh


本文章为个人见解,可能会有错误的地方,欢迎指出

参考文章:C++ primer 第五版、http://t.csdn.cn/N0Amh

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值