好吧,我正在制作一个c ++程序,它经历了很长的符号流,我需要存储信息以便进一步分析,在流中出现一定长度的符号序列.例如,在二进制流中
100110010101
我有一个长度为6的序列,如下所示:
我需要存储的是所有位置的向量,在那里我可以找到一个特定的序列.所以结果应该像表格一样,可能类似于哈希表,如下所示:
序列/位置
10010101 | 1 13 147 515
01011011 | 67 212 314 571
00101010 | 2 32 148 322 384 419 455
等等
现在,我认为将字符串映射到整数很慢,所以因为我预先在流中有关于符号的信息,所以我可以用它将这个固定长度的序列映射到一个整数.
下一步是创建一个映射,将这些"表示整数"映射到表中的相应索引,在此我添加该序列的下一个出现.然而,这是缓慢的,比我能负担得慢得多.我尝试了std和boost库的有序和无序映射,没有足够的效率.我测试了它,地图是这里真正的瓶颈
这是伪代码中的循环:
for (int i=seqleng-1;i<stream.size();i++) {
//compute characteristic value for the sequence by adding one symbol
charval*=symb_count;
charval+=sdata[j][i]-'0';
//sampspacesize is number off all possible sequence with this symbol count and this length
charval%=sampspacesize;
map<uint64,uint64>::iterator &it=map.find(charval);
//if index exists, add starting position of the sequence to the table …Run Code Online (Sandbox Code Playgroud) 我几乎找不到任何关于此的信息。是否以及如果可以,在什么情况下可以设置 eofbit (含义 ofstream_instance.eof() 为 true )?
我对独立的 ofstream 更感兴趣,它与某个 fstream 中的 ifstream 无关,因此 ifstream 无法设置“共享”eofbit(如果可能的话)。
如果我只是写入一个文件并且磁盘上没有空间或操作系统没有为写入提供另一个空间,那么我希望只设置 failbit 或 badbit,但在写入时到达文件末尾对我来说没有意义。但是,我找不到关于此的讨论。