首页 > 其他分享 >hashtable的常用方法

hashtable的常用方法

时间:2024-05-30 23:23:45浏览次数:15  
标签:map 常用 迭代 hmap hashtable 哈希 ans 方法 unordered

哈希表的定义和查找方法就不再赘述,此随笔主要写代码中的用法加深自己印象。

声明哈希表:

#include<unordered_map>
unordered_map<eleType_1, eleType_2> var_name;
unordered_map<int, int> map;
//或者之前用过的char int类型,char为key,int为char的值。后面的变量为两个
unordered_map<char, int> ans, arr; 

初始化哈希表

//这是int型的
unordered_map<int,int> hmap{ {1,10},{2,15},{3,20},{4,0},{5,12}}; 
//这是以char为关键字
unordered_map<char, int> ans{ {a,1},{b,1},{c,1},{f,2}}; 

通过直接赋值来进行元素添加(类似数组)

//这里是把hamp的key对应的数值进行改变,例如
//把上面的{4,0}中的值改成了14,{5,12}中的值改成15
hmap[4] = 14;
hmap[5] = 15;

同时还有内置函数insert来实现元素插入

hamp.insert({5,15});

复制另一个不为空的哈希表,把hmap复制给tests

unordered_map<int,int>hmap{ {1,10},{2,8},{3,7}};
unordered_map<int,int> tests(hmap);

STL中的常用函数

//申请迭代器,把迭代器的位置赋值到哈希表起始位置
unordered_map<int,int>::iterator iter = hmap.begin();
cout << iter->first << ":" <<iter->second;
//下面等同于上面
unordered_map<char,int> ans;
unordered_map<char,int>::iterator iter = ans.begin()
unordered_map<char,int>::iterator tailer = ans.begin()

1)begin函数,类似于return head,返回开始位置的迭代器,iterator是迭代器的类型
2)end函数,就是在哈希表的结尾位置的下一个元素的迭代器
如下copy-paste 解释
在 C++ 标准库的 unordered_map 中,.end() 返回的是一个指向容器末尾位置之后一个位置的迭代器。也就是说,tailer 指向的位置并不是容器中最后一个元素,而是超出容器实际元素范围的一个位置。这个位置通常被称为“哨兵”或“尾后迭代器”。
这意味着 tailer 不能用于访问任何有效的元素,如果试图解引用它(例如 *tailer),会导致未定义行为。因此,通常在迭代遍历容器时,用 iter != ans.end() 作为循环结束的条件,而不会试图访问 end() 所指向的位置。

int main() {
    std::unordered_map<char, int> ans;
    ans['a'] = 1;
    ans['b'] = 2;
    ans['c'] = 3;
    // 申请迭代器并初始化为哈希表的末尾位置
    std::unordered_map<char, int>::iterator tailer = ans.end();
    // 遍历哈希表
    for (std::unordered_map<char, int>::iterator iter = ans.begin(); iter != ans.end(); ++iter) {
        std::cout << iter->first << ": " << iter->second << std::endl;
    }
    return 0;

3)cbegin和cend 这两个函数与begin|end的用法相同,只不过是"const"->即无法改变的“常”哈希表

const unordered_map<int,int> hmap{{1,10},{2,12},{3,12}};
unordered_map<int,int>::const_iterator iter_b = hmap.cbegin();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~iter_a = hmap.cend();

标签:map,常用,迭代,hmap,hashtable,哈希,ans,方法,unordered
From: https://www.cnblogs.com/ink-bai/p/18223468

相关文章

  • 知识点整理 - 连通性相关 | 《综述图论中连通性及相关问题的一些处理方法》学习笔记
    是ix35老师论文的学习笔记,同时也用作连通性相关知识梳理。可能不会包含很多定义,只会挑重要的写。会包含一些例题。定义与记号\(u\rightsquigarrowv\)代表\(u\)到\(v\)的一条路径。有时也会用这个记号表示连通性。无向图点/边连通度:若\(u,v\)任意点割集大小不小......
  • ffmpeg使用方法
    合成视频ffmpeg-framerate25-iout/%04d.jpeg-c:vlibx264-r25-pix_fmtyuv420p-t40out_temp.mp4 截取指定坐标位置的视频ffmpeg-iin.avi-vfcrop=w=500:h=500:x=980:y=120out.mp4截取指定时长的音频ffmpeg-iinput.wav-ss00:00:00-t10-ccopyoutpu......
  • JavaScript实现跳转的方法
    在JavaScript中,实现页面跳转(即导航到另一个网页)有多种方法。以下是一些常见的方法及其示例代码:1.使用 window.location.href通过设置 window.location.href 属性,可以跳转到新的URL。javascriptwindow.location.href="https://www.example.com";2.使用 window.open......
  • 测试λ 函数的一种方法:通过全局 λ 函数表,保存所有λ 函数
    下面的方式,把任意的局部代码包装在λ函数里,就地调用,同时把λ函数保存到全局表,在外部访问。#include<iostream>#include<vector>#include<functional>#include<map>#include<any>//全局的map,用于保存foo函数内部的lambda函数std::map<std::string,std::any>......
  • Altium Designer (AD20)常用操作(持续更新)
    目录引言:   今天我带的新同事入职也快一段时间了,前几周基本就是熟悉环境,熟悉项目流程,听听企业文化。这周开始正式要接触项目,然后对于硬件工程师而言,一般要么就是你是主要负责layout,要么就是你要会绘制原理图,要么就是你做系统架构的不需要亲自动手,但是你要能懂layout的对......
  • 大模型中用到的归一化方法总结
    大模型中的归一化主要是为了解决LLM训练不稳定的问题LLM中归一化方法可以按照归一化方法来分,主要分为LayerNorm,BatchNorm,RMSNorm以及DeepNorm按照归一化位置来分类,包括postNorm和preNorm1.BatchNormBatchNorm主要对数据的一定的特征维度在batch数据中进行归一,一般来说应用......
  • 苹果手机数据不慎删除?这4个方法果粉必看!
    苹果手机该怎么恢复丢失的数据呢?有时候会因为使用不当或者是被他人误删等原因,导致重要的数据丢失,这时我们需要找回丢失手机数据,小编给大家分享4种恢复苹果手机数据的技巧,大家赶紧来学一学吧!一、icloud云备份数据恢复iCloud可以实现苹果手机数据的实时同步和备份,当遇到手机......
  • Python魔法之旅-魔法方法(04)
    目录一、概述1、定义2、作用二、主要应用场景1、构造和析构2、操作符重载3、字符串和表示4、容器管理5、可调用对象6、上下文管理7、属性访问和描述符8、迭代器和生成器9、数值类型10、复制和序列化11、自定义元类行为12、自定义类行为13、类型检查和转换14......
  • 证明欧几里得定理(这是一位刚学数论的初三生发明的方法)
    欧几里得定理:gcd(a,b)=......
  • mysql高级篇学习(数据表的设计方法,索引优化)
    使用docker安装mysql安装docker#yum包更新到最新yumupdate#卸载旧的dockeryumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\......