Markov C++从文件性能中读取

gog*_*sca 0 c++ string markov

我有C++类的第二个任务,其中包括马尔可夫链.赋值很简单但是我无法弄清楚从文件中读取字符时最佳实现是什么.

我有一个大约300k的文件.赋值的一个规则是使用Map和Vector类.在Map中(键只是字符串),值将是Vectors.当我从文件中读取时,我需要开始收集密钥对.

例:

File1.txt
1234567890
1234567890
Run Code Online (Sandbox Code Playgroud)

如果选择Markov k = 3,我应该在我的Map中:

key     vector
123  -> 4
456  -> 7
789  -> 0
0/n1 -> 2
234  -> 5
567  -> 8
890  -> /n
/n   -> NULL
Run Code Online (Sandbox Code Playgroud)

教授的建议是用char读取char,所以我的算法如下

while (readchar != EOF){
tempstring += readchar
increment index
if index == Markovlevel {   
       get nextchar if =!EOF
       insert nextchar value in vector
       insert tempstring to Map and assign vector         
       unget char
}

}
Run Code Online (Sandbox Code Playgroud)

我省略了一些其他细节.我的主要问题是,如果我有318,000个字符,我每次都会做有条件的,这会大大减慢我的电脑速度(全新的MAC专业版).教授的示例程序在大约5秒内执行该文件.

我无法弄清楚在C++中从文本文件中读取固定长度单词的最佳方法是什么.

谢谢!

ami*_*mit 5

重复读取文件会降低程序速度.

以1024块大小的块读取文件,放入缓冲区.然后根据您的分配处理此缓冲区.重复下一个块,直到完成该文件.