У меня есть простое требование, мне нужна карта типа. однако мне нужно самое быстрое теоретически возможное время поиска.
я использовал как карту, так и новый предложенный unordered_map из tr1 Я обнаружил, что по крайней мере при разборе файла и создании карты, вставляя элемент вовремя.
Картазаняла всего 2 минуты, в то время как unordered_map занял 5 минут.
Как i, он будет частью кода, который будет выполняться на кластере Hadoop и будет содержать ~ 100 миллионов записей, мне нужно минимально возможное время поиска.
Также другая полезная информация: в настоящее время данные (ключи), которые вставляются, представляют собой диапазон целых чисел от 1,2,... до ~ 10 миллионов.
Я также могу навязывать пользователю указать максимальное значение и использовать порядок, как указано выше, что значительно повлияет на мою реализацию? (я слышал, что карта основана на деревьях 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();
}
Предварительное решение: после обзора комментариев и ответов, я считаю, что оптимальный вариант будет иметь динамический С++-массив, поскольку реализация будет использовать плотные ключи. Благодаря