>stemp>>itemp) { 映射[stemp]=itemp; } },c++,file,map,coding-style,fstream,C++,File,Map,Coding Style,Fstream" /> >stemp>>itemp) { 映射[stemp]=itemp; } },c++,file,map,coding-style,fstream,C++,File,Map,Coding Style,Fstream" />

C++ 为什么我的程序在向地图插入值时停止? 我试着把一个文件读入一个地图,但是程序停在文件中间。 该文件由数百万行组成,每行是由数字和整数组成的字符串。 e、 g.1230981237120313 123 #include<map> #include<iostream> #include<fstream> void main () { ifstream mapfile("filename.txt",ifstream::in); int itemp; string stemp; map<string,int> mapping; while(mapfile>>stemp>>itemp) { mapping[stemp]=itemp; } } #包括 #包括 #包括 空干管() { ifstream映射文件(“filename.txt”,ifstream::in); int itemp; 字符串stemp; 地图制图; while(映射文件>>stemp>>itemp) { 映射[stemp]=itemp; } }

C++ 为什么我的程序在向地图插入值时停止? 我试着把一个文件读入一个地图,但是程序停在文件中间。 该文件由数百万行组成,每行是由数字和整数组成的字符串。 e、 g.1230981237120313 123 #include<map> #include<iostream> #include<fstream> void main () { ifstream mapfile("filename.txt",ifstream::in); int itemp; string stemp; map<string,int> mapping; while(mapfile>>stemp>>itemp) { mapping[stemp]=itemp; } } #包括 #包括 #包括 空干管() { ifstream映射文件(“filename.txt”,ifstream::in); int itemp; 字符串stemp; 地图制图; while(映射文件>>stemp>>itemp) { 映射[stemp]=itemp; } },c++,file,map,coding-style,fstream,C++,File,Map,Coding Style,Fstream,当它处理数百行的小文件时,就可以了。但当它达到9000万行以上时,它会停止运行而不报告任何错误,只需“按任意键继续…”即可停止运行 我已经做了一些分析,我可以确保程序在读取文件中的行之后以及需要进行映射[stemp]=itemp时停止。每次它停下来,都会发生在不同的线路上,但总是在9000万左右 谁能告诉我为什么会这样? 非常感谢您的帮助。建议您不要在内存中同时读取整个文件***,因为文件大小可能从小KB到大MB不等 最好是用块来读,说几千个字节(比如4092),每次从文件读取时都要处理和关闭它

当它处理数百行的小文件时,就可以了。但当它达到9000万行以上时,它会停止运行而不报告任何错误,只需“按任意键继续…”即可停止运行

我已经做了一些分析,我可以确保程序在读取文件中的行之后以及需要进行
映射[stemp]=itemp
时停止。每次它停下来,都会发生在不同的线路上,但总是在9000万左右

谁能告诉我为什么会这样?
非常感谢您的帮助。

建议您不要在内存中同时读取整个文件***,因为文件大小可能从小KB到大MB不等


最好是用块来读,说几千个字节(比如4092),每次从文件读取时都要处理和关闭它。

你是在监视内存使用吗?也可以考虑在X百万行之后(或者只使用调试器)开始从文件中获取值。为了查看问题的确切发生时间。内存不足。将代码放入try块并捕获
std::bad\u alloc&
(include)如果发生这种情况,则内存不足。请检查mapping.max\u size()并执行mapping。size()
std::map
既不是任意限制,也不是特别限制;然而,进程的可分配内存空间是有限的。一个戒指来统治他们所有人。@WhozCraig,是的,我同意。@user1502952可能就是这样。谢谢但是,如果我只是读取文件,而不将其放入map,它可以很好地执行,直到文件结束。当我想插入地图时,就会发生这种情况。它正好发生在mapping[stemp]=itemp行。如果我关闭文件,我如何找到完成最后一个块的位置?