首页 > 其他分享 >哈希表总结

哈希表总结

时间:2023-04-30 12:23:40浏览次数:33  
标签:总结 map set key 元素 哈希 myMap unordered

哈希表总结

常用数据结构总结

  1. 数组
    有些时候, 使用数组可以直接充当简单的哈希表,
    数组元素的下标作为 key 值,元素的值作为 value 值
    比如统计一个单词各个字符出现的次数,因为字母 26 个数目是有限的,所以数组的下标也是有限的,可以轻松实现。

    使用数组的情况, 数组的下标一般都是有限的, 同时下标也要>=0,有些时候可以做适当的转换

  2. set
    set 包含头文件
    set 为一个元素的集合,只存储键值,为有序集合---1 2 3 4 5

    unordered_set 包含头文件<unordered_set>
    unordered_set 为无序集合,查找更高效--- 3 1 4 5 2

    multiset 包含头文件为(不常用)
    multiset 为有序集合,元素可重复,--- 1 1 2 3 3 4 5
    有时候,也可以代替 map 的功能,如有元素个数有多个则插入多个相同元素

  3. map
    map 包含头文件

    unordered_map 包含头文件<unordered_map>

    mutlimap 包含头文件(不常用)

set 和 map 的常用方法

以 unordered_set 和 unordered_map 为例子

访问元素

根据 key 获取 value---用于 unordered_map
unordered_map 中访问元素可以直接通过下标进行访问,也就是通过 key 值来访问

如 myMap['a']

也可以通过迭代器来访问
auto it = myMap.find('a');
it->first
it->second

插入元素
unordered_set,插入 key 值
mySet.insert(key)

unordered_map,插入元素的(key,value)
有三种方式

  1. 直接使用下标的方式, 类似于数组的赋值

    myMap['name'] = "peiqi";

  2. 使用 insert 加上 pair

    myMap.insert(pair<string,string>("name","peiqi"));

  3. 使用 insert 加上 value_type

    myMap.insert(map<string,string>::value_type("name","peiqi"));

    也可以结合 typedef,简化书写,如

    typedef std::unordered_map<int, int> Mymap;

    tempMap.insert(Mymap::value_type(nums[i], i));

查询元素
find---根据 key 值来查询元素,返回一个指向目标的迭代器

auto it = mySet.find('a');

if(it!=mySet.end()), 表示元素在集合内

*it;

auto it = myMap.find('a');

it->first;

it->second;

修改元素

对于 unordered_map, 可以直接使用下标进行修改
myMap["name"] = "qiaozhi"

也可以先用 find 获取迭代器指针 it,再用迭代器指针修改 it->second

删除元素

使用 erase

iterator erase(const_iterator Where);

iterator erase(const_iterator First, const_iterator Last);

size_type erase(const key_type& Key);//返回删除元素的个数

根据 key 值删除

使用迭代器删除

标签:总结,map,set,key,元素,哈希,myMap,unordered
From: https://www.cnblogs.com/jianchuxin/p/17365104.html

相关文章

  • OOP题目集4~6总结
    前言:这次的题目集难度较以往而言提升了很多,突然提升的难度难免会造成些许的不适应。但是题目虽然有难度,同样的收获也与难度成正比增长。而这次题目集总结主要以三道大题来进行分析。  第四次作业:题目7-1菜单计价程序-3:需求分析:设计菜单点单计价程序,根据输入......
  • 南昌航空大学4-6次PTA总结
    对近期所学进行一个小结,主要针对pta上所发布的近三次作业,从多方面来分析这三次作业之间的联系和差异性,并从中了解自己的不足和缺点。最近的三次作业, 第一次作业除了第一题菜单类比较难其他还是比较简单,通过调用java自带的方法来节省我们编程的时间,主要考察的是我们对java的字符......
  • 刷题总结
    结束本轮的刷题任务感受颇多基本体现在双指针回溯以及动规上使用双指针法,定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。,时间复杂度是O(n)回溯算法能解决如下问题:组合问题:N个数里面按一定规则找出k个数的集合排列问......
  • 总结,从 766 开始(Div2 30)
    3.10A分块B 分数规划,以前没学过C推式子 3.11A推结论,先划分连续段,然后从一个长度>=k的连续段开始操作B推式子C平衡树套线段树(为了节省空间需要把内层线段树改成平衡树)或定期重构+树上差分+动态开点线段树,每个结点上有一棵线段树,每B次操作后向上合并 3.12......
  • 师大 2023.04 总结
    题目1:P10011A第1次提交提交通过。每次减去\(\max(n-n/2,x)\),边减边计数。题目2:P10021A第1次提交提交通过。\(cnt\)表示字符串有\(cnt\)对对应的字符不同。对于每组询问,因为只改变一个字符,看改变字符改变前和改变后和对应字符的关系(相同或不同),以改......
  • 每日总结2023-04-29
    今天初步学习了kotlin语言在学习中认为比较重要的点:在学习字符串模板时,我们了解到,可以在单个变量名称前加上$符号。但是,如果您使用更复杂的表达式,就必须用大括号将该表达式括起来,并在大括号前添加$符号:${unreadCount+readCount}。用大括号括起来的表达式(即unreadCount+......
  • OOP4-6题目集总结
    4-6次题目集,从集合框架,正则表达式,类的继承与多态三个方面展开,在帮助我们了解java常用的工具(集合框架,正则表达式)的同时让我们学着利用类与类之间的关系来减少耦合,第六次题目集侧重于类的继承与多态,同时让我们自己根据题目设计类来解题,在了解面向对象的编程思想后,加强我们对类与......
  • Java学习2——第四-六次题目集的分析与总结
     一.前言 本次Blog是对java学习中第二阶段练习的一个总结,作为刚学习JAVA的小白,以下依旧只是本人作为普通学生,以当前能力和状态所做出的总结和分析,不足之处也欢迎各位大佬的指正! 这次的三个题目集,题量除了题目集六很少外,其它都是正常数量,当然题目集六的题也是最难的。总体难......
  • 题目集4-6总结
    一、前言本阶段的题目集最开始还是和前面的题目集有些相似的内容,但相较于前阶段的题目集主要是改进了代码所用到的知识点使代码更加简洁与所用内存更加小。这次题目集的难度还可以,并且是逐渐加大难度的,特别是题目集六一道题一百分。这次的题目集主要考察了正则表达式的应用,类与类......
  • 哈希表
    \[哈希表\begin{cases}存储结构\begin{cases}开放寻址法\\[2ex]拉链法\\[2ex]\end{cases}\\[3ex]字符串哈希方式\\[3ex]\end{cases}\]一般哈希开放寻址法//开放寻址法模板constintN=(数据范围的2~3倍,质数),null=(数据范围外的数,常用0x3f3f3f3f);inth[N];......