cpp写哈希表常用的几种数据结构总结

array数组--大道至简

一个类型名,一个对象名,一个中括号[],我们数组就是这么简单

int num[99];
char alh[26];
string message[233];

简单,并不等于低劣。

恰恰相反,数组可能永远是cpp最高效,最省空间的数据结构了,因为什么操作功能都没有,数组可谓一身轻。

数组在分配一块空间后,便可以最高效的索引访问元素,在大规模数据访问上比链表要快得多,而且因为简单质朴,占用空间也是压缩到极致。

在追求极致的性能面前,静态数组永远是我们的首选。

unordered_set--记忆功能

如果问set最大的特色是什么的话,我觉得它,有点像一个纸条,上面有1-99(n)的数字,每次可以裁掉一个数字做标记,但是只有标记的功能却不能计数。

如果真的只是1-99的数字的话,我们完全可以用静态数组(. - 力扣(LeetCode))(1-1000),上面只是一种描述。真正用得着unordered_set的情况,是要存储不可预知的大数字的时候,盲目使用静态数组可能会造成大量空间的使用,甚至即使如此也无法存储大数字(比如1*10^15,创建一个这么大的数组会占用大量空间)

除此之外,不同于静态数组通常用下标代表存储的int元素,unordered_set还可以标记string,char等多种类型,果然还是更专业一些。

一般情况下,我们使用下列代码确认是否标记:

if(record.find(num)!=record.end()){
            ans.push_back(num);// or use .insert()
        }

find用一个指针变量遍历unordered_set,遇到目标则返回指针,没有目标便会抵达record.end();

unordered_map--多样类型

unorered_map有点像unordered_set的升级版,功能更强大(当然也会占用更多内存,运行更多时间),在存储键值的同时还能存储一个对应的元素,将两者捆绑在一起。

std::unordered_map<Person, std::string> mapPerson;

如果你尝试存储同键不同值的数据,有后来居上的规则,新数据会覆盖老数据。

map也可以使用find来查找键值对,规则同上

显然,map的功能进一步具体,在特定的条件下是更直观便捷的选择

题外话

把unordered_map,unordered_set这些数据的unordered去掉,map,set本身也是cpp的数据结构,当然,它们功能有差异(不然为什么取不一样的名字),这会涉及红黑树,他们主要的区别是是否会自动排序,甚至按自定义的函数排序

std::map<std::string, std::string, CaseInsensitiveCompare> mapStr;

随着学习的深入,我也会持续更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Monster_Prince

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

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

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

打赏作者

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

抵扣说明:

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

余额充值