У меня есть простое требование, мне нужна карта типа. однако мне нужно самое быстрое теоретически возможное время поиска.
я использовал и карту, и новый предложенный unordered_map из tr1
я обнаружил, что, по крайней мере, при разборе файла и создании карты, вставляя элемент одновременно.
Карта заняла всего 2 минуты, а unordered_map - 5 минут.
Поскольку он будет частью кода, который будет выполняться в кластере 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();
}
Предварительное решение: После просмотра комментариев и ответов я считаю, что лучшим вариантом будет массив Dynamic C ++, поскольку в реализации будут использоваться плотные ключи. Спасибо