我有一个简单的要求,我需要一个地图的类型。然而,我需要理论上最快的检索时间。
我使用了map和来自tr1的新提议的unordered_map,我发现至少在解析文件和创建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++数组将是最好的选择,因为实现将使用密集键。谢谢
https://stackoverflow.com/questions/2350248
复制相似问题