単純な要件があります。 type のマップが必要です。ただし、理論的に可能な最速の検索時間が必要です。
マップと、tr1 から新しく提案された unordered_map の両方を使用しました。少なくとも、ファイルを解析してマップを作成しているときに、要素を一度に挿入することでそれを発見しました。
unordered_map には 5 分かかりましたが、map には 2 分しかかかりませんでした。
これは Hadoop クラスターで実行されるコードの一部になり、最大 1 億のエントリが含まれるため、可能な限り短い取得時間が必要です。
また、別の役立つ情報: 現在、挿入されているデータ (キー) は、1、2、... から 1,000 万までの整数の範囲です。
上記のように最大値を指定して順序を使用するようにユーザーに強制することもできますが、それは私の実装に大きな影響を与えますか? (マップは 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++ 配列が最適なオプションになると思います。ありがとう