用链表方式处理的冲突,以下是我的哈希表
typedef struct {
Term *tm; //数据元素存储基址,动态分配数组
int count; //当前数据元素个数
int sizeindex; //hashsize[sizeindex]为当前容量
}HashTable;
插入内容的部分就不写了,用链表方式处理的冲突
大家帮帮忙,如何能保存这个哈希表到文件里呢?怎么能从文件里整个直接读取出来整个哈希表到内存中呢?
谢谢大家了~~
15 个解决方案
#1
楼主也许换个思路会更好……
将数据写入文件,而不是将哈希表写入文件。
读取数据,并直接在内存生成哈希表更合算
将数据写入文件,而不是将哈希表写入文件。
读取数据,并直接在内存生成哈希表更合算
#2
我处理的是一个200多兆的txt文档,现在的做法就是读取数据,然后直接在内存中生成哈希表,但是这样处理一次要很长很长时间,所以,想把建好的哈希表存起来,用的时候读整个的哈希表,不知道这样做能不能行得通呢?谢谢了~
#3
不太清楚~~
#4
顶一下,大家帮帮忙,谢谢了~
#5
我也推荐存取数据,重新建表。
如果想避免插入操作直接拷贝整个链表,也只会比重新建表少了一步hash索引操作而已,其他的操作全都无法避免
,意义不大。。
如果想避免插入操作直接拷贝整个链表,也只会比重新建表少了一步hash索引操作而已,其他的操作全都无法避免
,意义不大。。
#6
用fstream::write()方法写,用fstream::read()读取;
我建议文件用二进制流。
建议每个结构体写入文件时,采用这种方法。
先保存结构体的count值,然后将指针对应的数组数据写入文件。然后写sizeIndex。
读取时:
先读取出count,然后动态创建数组,将读取的数据一次填入动态创建的数组,然后把动态申请的地址赋值给结构的指针成员函数,然后读取sizeindex。
我建议文件用二进制流。
建议每个结构体写入文件时,采用这种方法。
先保存结构体的count值,然后将指针对应的数组数据写入文件。然后写sizeIndex。
读取时:
先读取出count,然后动态创建数组,将读取的数据一次填入动态创建的数组,然后把动态申请的地址赋值给结构的指针成员函数,然后读取sizeindex。
#7
大文件应该用结构化的方式存储到文件中,操作的时候直接映射到进程空间,然后直接操作内存,这样就不用每次解析文件内容了。
#8
可以给出个具体一些的代码框架吗?
#9
行不通。要不然提高解析文件和建立hashtable的速度,要不然使用现成的数据库。
#10
可以,用二进制流的方式,绝对可以
#11
能给一些参考的代码吗?
#12
用指针肯定是不行的 想办法转成用相对位移
#13
分到不同文件名中存储
#14
分到不同文件名的文件中存储
#15
如果你的文件有200M的话,那么用一步来创建hash的时间和读取文件的时间比,简直微乎其微,所以,直接用的时候及时的建hash也没什么问题
或者,你将建完的hash写入文件的时候,在每个字段之后写一个标志位,表明hash[i]的数据已经写完了,读的时候碰到标志位就i++就行了吧!!
或者,你将建完的hash写入文件的时候,在每个字段之后写一个标志位,表明hash[i]的数据已经写完了,读的时候碰到标志位就i++就行了吧!!
#1
楼主也许换个思路会更好……
将数据写入文件,而不是将哈希表写入文件。
读取数据,并直接在内存生成哈希表更合算
将数据写入文件,而不是将哈希表写入文件。
读取数据,并直接在内存生成哈希表更合算
#2
我处理的是一个200多兆的txt文档,现在的做法就是读取数据,然后直接在内存中生成哈希表,但是这样处理一次要很长很长时间,所以,想把建好的哈希表存起来,用的时候读整个的哈希表,不知道这样做能不能行得通呢?谢谢了~
#3
不太清楚~~
#4
顶一下,大家帮帮忙,谢谢了~
#5
我也推荐存取数据,重新建表。
如果想避免插入操作直接拷贝整个链表,也只会比重新建表少了一步hash索引操作而已,其他的操作全都无法避免
,意义不大。。
如果想避免插入操作直接拷贝整个链表,也只会比重新建表少了一步hash索引操作而已,其他的操作全都无法避免
,意义不大。。
#6
用fstream::write()方法写,用fstream::read()读取;
我建议文件用二进制流。
建议每个结构体写入文件时,采用这种方法。
先保存结构体的count值,然后将指针对应的数组数据写入文件。然后写sizeIndex。
读取时:
先读取出count,然后动态创建数组,将读取的数据一次填入动态创建的数组,然后把动态申请的地址赋值给结构的指针成员函数,然后读取sizeindex。
我建议文件用二进制流。
建议每个结构体写入文件时,采用这种方法。
先保存结构体的count值,然后将指针对应的数组数据写入文件。然后写sizeIndex。
读取时:
先读取出count,然后动态创建数组,将读取的数据一次填入动态创建的数组,然后把动态申请的地址赋值给结构的指针成员函数,然后读取sizeindex。
#7
大文件应该用结构化的方式存储到文件中,操作的时候直接映射到进程空间,然后直接操作内存,这样就不用每次解析文件内容了。
#8
可以给出个具体一些的代码框架吗?
#9
行不通。要不然提高解析文件和建立hashtable的速度,要不然使用现成的数据库。
#10
可以,用二进制流的方式,绝对可以
#11
能给一些参考的代码吗?
#12
用指针肯定是不行的 想办法转成用相对位移
#13
分到不同文件名中存储
#14
分到不同文件名的文件中存储
#15
如果你的文件有200M的话,那么用一步来创建hash的时间和读取文件的时间比,简直微乎其微,所以,直接用的时候及时的建hash也没什么问题
或者,你将建完的hash写入文件的时候,在每个字段之后写一个标志位,表明hash[i]的数据已经写完了,读的时候碰到标志位就i++就行了吧!!
或者,你将建完的hash写入文件的时候,在每个字段之后写一个标志位,表明hash[i]的数据已经写完了,读的时候碰到标志位就i++就行了吧!!