哈希表

哈希表是一种很常见的数据结构,我现在平时刷算法题一般使用C++刷(不要问我为什么,懂的都懂)。C++关于哈希表有很多数据结构,平时使用的比较多的有unordered_set 跟 unordered_map。其中unordered_map 存储的是键值对。
其实我们在某些情况下可以使用数组构建哈希表(具体是哪些情况的呢,自行搜索)。但是数组的大小是受限制的,而且如果元素很少却哈希值很大的话会造成内存空间的浪费(至于为什么会这样请自行搜索)。

为什么要用哈希表

如果现在做哈希表的题目,是因为按专题刷的哈希表的题目,所以会直接用哈希表。但是遇到一道新的题目,没有标签,怎么想到使用哈希表呢?
咱们要清楚一点的就是,一般哈希表都是用来快速判断一个元素是否出现在集合里。

遍历

for (auto i = hash.begin(); i != hash.end(); i++)

如果是unordered_map,遍历的时候,可以访键值i ->first或者是i->second;

查找

查找某个元素是否在哈希表中,可以使用hash.find(x) != hash.end(),或者hash.count(x) > 0
注意:hash.count(x) 的数值只有 0 和 1。所以不能通过hash.count(x)来表示x在hash 中出现的次数。

插入

在unordered_set 中插入元素,可以用hash.insert(key)
在unordered_map中插入元素,可以使用hash[key] = value

删除

在unordered_set 跟unordered_map 中删除元素,都用hash.erase(key)
注意,在unordered_map 中,即使hash[key] == 0,如果之前已经将key存入到hash中,然后通过hash[key] -- 使得hash[key] == 0,hash 中还会存在key ,也就是说此时hash.count(key) == 1
在个别场景下,可能需要一次性删除 unordered_map 容器中存储的所有键值对,可以使用clear()方法,其语法格式如下:

void clear()
{
hash.clear();
}

我觉的刷题会这些基本的操作足够了,想深层次的了解哈希表的话自行查阅资料吧。

C++ 哈希表基本用法相关推荐

  1. HashTable哈希表的用法---简单总结

    哈希表是一种数据类型,跟集合差不多. 优点:便于插入和删除 . 缺点:基于数组的操作.不便于扩充容量. 数据的存放形式是键值对形式:(key, value) 测试代码: using System; u ...

  2. 哈希表——开哈希表和闭哈希表

    #include <iostream> using namespace std; #define HashTable_Size 100 //用除留余数法求关键字的哈希地址 int Hash ...

  3. C# 哈希表(Hashtable)用法笔记

    一.什么是Hashtable? Hashtable 类代表了一系列基于键的哈希代码组织起来的键/值对.它使用键来访问集合中的元素. 当您使用键访问元素时,则使用哈希表,而且您可以识别一个有用的键值.哈 ...

  4. C#中哈希表(HashTable)的用法详解

    1.  哈希表(HashTable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对, ...

  5. redis命令之哈希表类型hgetall命令用法详情

    哈希表 HGETALL命令 命令:hgetall key,返回对应key的所有的域field和与之对应的value,当key不存在时返回empty list or set,而不是nil 127.0.0 ...

  6. redis命令之哈希表类型hset命令用法详情(返回值需要特别注意)

    哈希表 HSET命令 可以同时设置多个field,有点类似mset(不同在于多个key,数据类型不同) 命令:hset key field value [field value] [field val ...

  7. 哈希表的创建方式及用法

    创建哈希表 1.使用数组进行哈希表的创建 String [] hashTable = new String[4]; 2.使用hashMap创建哈希表 HasnMap<Integer,String ...

  8. redis命令之哈希表类型hincrby命令用法详情

    哈希表 HINCRBY命令 命令:hincrby key field increment,将指定表key的field字段,按照increment增量进行加算,increment可以为负数,如果key ...

  9. 数据结构基础温故-6.查找(下):哈希表

    哈希(散列)技术既是一种存储方法,也是一种查找方法.然而它与线性表.树.图等结构不同的是,前面几种结构,数据元素之间都存在某种逻辑关系,可以用连线图示表示出来,而哈希技术的记录之间不存在什么逻辑关系, ...

最新文章

  1. Android APK加壳技术方案----代码实现
  2. 【java】巨菜博主安装jdk为什么每次都失败?
  3. リストに項番をつける
  4. 北航计算机考博C语言真题_北京航空航天大学计算机考研:严厉的老父亲,教会你本事,本科非211以上就不要去了...
  5. MySQL带ALL关键字的子查询
  6. 推荐15个在线多媒体(图片、音频、视频)编辑器
  7. 饼图的引导线怎么加_4步学会EXCEL复合条饼图制作方法,让统计结果更直观!
  8. SQL触发器实例讲解
  9. Python之倒序切片
  10. 《通用规范汉字表》背景知识词条
  11. 《深度学习入门-基于Python的理论与实现》书籍介绍
  12. SpringSecurity实战(六)-集成图形验证码-自定义认证实现
  13. 计算机发展史上一些重要的著作
  14. java8 stream 原理_【修炼内功】[Java8] Stream是怎么工作的
  15. 什么是负载?如何查看服务器的机器负载情况?
  16. H3C交换机机框首次启动报错“The device (FFFFFFFF-40) doesn‘t support this kind of board.”
  17. CTF新生赛之Writeup
  18. 适配器快充方案——智融SW351X
  19. 沧小海笔记本之A7系列FPGA资源介绍
  20. 手推遗传算法(Genetic Algorithm,GA)的详细步骤图解

热门文章

  1. Python3 字典浅析
  2. dell服务器poweredge T620装ubuntu很卡显卡驱动有问题(matrox g200er2显卡)
  3. vue element-upload上传视频或音频获取视频时长
  4. 【Markdown 教程】——程序员利器
  5. CSM认证培训知识汇总
  6. 通用漏洞评估方法CVSS 3.0 计算公式及说明
  7. 杭电oj2201 熊猫阿波的故事题解
  8. IDEA SpringBoot项目配置热更新,无需每次手动重启服务器
  9. 看过的最最最搞笑的电视剧结局
  10. JavaScript经典效果集锦之四,五