我有一个简单的要求,我需要一个类型的地图。但是我需要理论上最快的检索时间。
我同时使用了地图和来自 tr1 的新提议的 unordered_map,我发现至少在解析文件和创建地图时,通过一次插入一个元素。
map 只用了 2 分钟,而 unordered_map 用了 5 分钟。
因为我将成为在 Hadoop 集群上执行的代码的一部分,并且将包含约 1 亿个条目,所以我需要尽可能短的检索时间。
还有另一个有用的信息:目前正在插入的数据(键)是从 1,2,... 到 ~1000 万的整数范围。
我还可以强制用户指定最大值并使用上述顺序,这会显着影响我的实现吗?(我听说 map 是基于 rb 树的,按递增顺序插入会带来更好的性能(或最差的性能?))
这是代码
map<int,int> Label // this is being changed to unordered_map
fstream LabelFile("Labels.txt");
// Creating the map from the Label.txt
if (LabelFile.is_open())
{
while (! LabelFile.eof() )
{
getline (LabelFile,inputLine);
try
{
curnode=inputLine.substr(0,inputLine.find_first_of("\t"));
nodelabel=inputLine.substr(inputLine.find_first_of("\t")+1,inputLine.size()-1);
Label[atoi(curnode.c_str())]=atoi(nodelabel.c_str());
}
catch(char* strerr)
{
failed=true;
break;
}
}
LabelFile.close();
}
暂定解决方案:在查看评论和答案后,我相信动态 C++ 数组将是最佳选择,因为实现将使用密集键。谢谢