火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 2644|回复: 34
打印 上一主题 下一主题

[视窗] 【源码】更新-魔改无序哈希表,真正意义支持任意火山类型

[复制链接]

12

主题

100

帖子

1319

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1319
跳转到指定楼层
楼主
发表于 2023-7-21 11:10:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小小小小鸟 于 2023-7-28 18:48 编辑

已过时:由于火山PC的一些特性,无法在嵌入代码的<include></include>中使用自定义类的数据类型(除了指针和引用),使得在定义哈希表类型时如果是自定义类,便无法通过编译,之前的解决办法是值类型设置为变整数存入对象指针然后再读指针处对象(或者用对象包装类再强制类型转换),本源码通过将类成员变量 unordered_map改为变整数(指针) 来实现支持任意值类型(然后在具体方法中实现变整数指针到unordered_map的变化引用,长的让人心累),另外扩充 HashFunc来完善键的哈希计算,就不用分开定义 基础值类型和文本型与字节集的模板类了,最终实现通用哈希表模板类(改自"飞翔的企鹅"的封装代码,感谢大佬的付出):
已过时:  模板类型1-key: 基本数据类型(字节,短整数,整数,长整数,变整数,小数,字符,文本型,字节集类)
已过时:  模板类型2-value: 任意数据类型,包含基本数据类型和各种类
游客,如果您要查看本帖隐藏内容请回复

2023-07-23:已过时:改变了写法,用 @def_marco和 @m<XX>简化了在各个方法中的指针到对象变换,火山源码的可读性好了一点,但是翻译成CPP仍然是很长
游客,如果您要查看本帖隐藏内容请回复

2023-07-28:通过使用  std::remove_pointer_t 省去了复杂的指针到unordered_map的转换,保留了 unordered_map 作为类成员变量,更加简化了各个方法中的代码。在HashFunc和EqualFunc中通过模板SFINAE和操作符重载,简化了写法,并且实现了key是自定义类的可能型。PS:越来越觉得c++模板实在太优雅了~要学的东西太多了···

模板类型1-key: 任意数据类型,包含基本数据类型和各种类。当key为自定义类时,建议自行实现GetHash方法或继承可哈希基类覆盖GetHash方法,否则会调用默认哈希函数返回1,此时相当于链表结构(加上外层包装甚至还不如),检索方式从头到尾,对大量数据极不友好。
模板类型2-value: 任意数据类型,包含基本数据类型和各种类。


游客,如果您要查看本帖隐藏内容请回复

如有问题,请指正~
回复

使用道具 举报

21

主题

288

帖子

1275

积分

金牌会员

Rank: 6Rank: 6

积分
1275
沙发
发表于 2023-7-21 12:15:54 | 只看该作者
6666666666
回复

使用道具 举报

32

主题

440

帖子

2181

积分

金牌会员

Rank: 6Rank: 6

积分
2181
板凳
发表于 2023-7-21 12:30:31 | 只看该作者
66666666666
回复

使用道具 举报

372

主题

2269

帖子

7389

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7389
地板
发表于 2023-7-21 13:08:41 来自手机 | 只看该作者
不知道这样改会不会有问题。因为吴总竟然把xx到字节集哈希表给注释了,据说是存在问题。。但是我给取消注释用着也没啥问题。。
回复

使用道具 举报

7

主题

409

帖子

2164

积分

金牌会员

Rank: 6Rank: 6

积分
2164
QQ
5#
发表于 2023-7-21 13:10:23 | 只看该作者
感谢分享
回复

使用道具 举报

12

主题

100

帖子

1319

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1319
6#
 楼主| 发表于 2023-7-21 15:39:38 | 只看该作者
shuimiao 发表于 2023-7-21 13:08
不知道这样改会不会有问题。因为吴总竟然把xx到字节集哈希表给注释了,据说是存在问题。。但是我给取消注释 ...

我自己测试也没发现问题,只要字节集类的构造和析构没有问题,按理说是不会有问题的
回复

使用道具 举报

2

主题

49

帖子

773

积分

高级会员

Rank: 4

积分
773
7#
发表于 2023-7-21 17:27:06 | 只看该作者
66666666666
回复

使用道具 举报

4

主题

509

帖子

2518

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2518
8#
发表于 2023-7-21 18:19:42 | 只看该作者
支持开源
回复

使用道具 举报

2

主题

133

帖子

2188

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2188
9#
发表于 2023-7-21 22:25:43 | 只看该作者
谢谢分享
回复

使用道具 举报

5

主题

68

帖子

693

积分

高级会员

Rank: 4

积分
693
10#
发表于 2023-7-22 01:02:14 | 只看该作者

支持开源
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-5-18 21:33 , Processed in 0.100408 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表