【发布时间】:2016-01-12 13:31:50
【问题描述】:
我有一个 C++ 中的映射结构,它包含大约 6000 万对。填充地图后,我想将其写入普通文件。
目前这段代码很慢,我想知道您是否对如何加快编写速度有任何建议?
我可以 1) 改进在地图中访问元素的方式吗?或者 2) 通过加速文件写入本身?
map<int,std::pair<int, int>> myMap;
//populate map
typedef map<int,std::pair<int, int>>::const_iterator MapIterator;
int cnt=0;
for (MapIterator iter = myMap.begin(); iter != myMap.end(); ++iter)
{
ofile<<iter->second.first<<","<<iter->second.second<<"\n";
//just printing every 1 million edges written.
cnt++;
if(cnt%1000000==0)
cout<<cnt<<endl;
}
请注意,我必须使用保留键顺序的数据结构(即映射)
【问题讨论】:
-
什么是“相当慢”?将 6000 万行写入文件可能需要“一段时间”。
-
您可以通过先写入
std::ostringstream然后将结果以一大块写入磁盘来加快写入速度。 -
你使用的是什么编译器和操作系统?
-
要确定“改进空间”的最大界限,您可以写 one 对 6000 万次并测量它。你的代码总是会变慢。
-
如果你想要快速的东西,存储二进制而不是文本。很有可能您的大部分处理时间都花在了用整数制作字符串。
标签: c++ performance dictionary data-structures