Tengo un requisito simple, necesito un mapa de tipo. sin embargo, necesito el tiempo de recuperación teóricamente más rápido posible.Diferencia en el rendimiento entre el mapa y unordered_map en C++
utilicé tanto el mapa como la nueva propuesta de unordered_map de tr1 encontré que al menos al analizar un archivo y crear el mapa, al insertar un elemento en el momento.
el mapa tomó solo 2 minutos, mientras que unordered_map tardó 5 minutos.
Como i va a ser parte de un código para ser ejecutado en el clúster Hadoop y contendrá ~ 100 millones de entradas, necesito el menor tiempo de recuperación posible.
También otra información útil: actualmente los datos (claves) que se insertan son de un rango de números enteros de 1,2, ... a ~ 10 millones.
También puedo imponer al usuario que especifique el valor máximo y que use el orden como se indicó anteriormente, ¿afectará esto significativamente a mi implementación? (Mapa que he oído se basa en árboles rb e insertar en orden creciente conduce a un mejor rendimiento (o peor)?)
Este es el código
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();
}
Solución provisional: Después de la revisión de los comentarios y respuestas, i creemos que una matriz Dynamic C++ sería la mejor opción, ya que la implementación usará claves densas. Gracias
sí desde mi experiencia dict en python una tabla hash siempre debe ser más rápida en comparación con un mapa basado en un árbol binario, pero al menos para la inserción encuentro que el mapa es más rápido que unordered_map. –
es posible que el reajuste provoque un aumento significativo en el tiempo de las inserciones, ya que no proporciono ninguna pista sobre la posible cantidad de elementos. –
, ¿está garantizado que es O (1) en la inserción o no, no puedo decirlo? ¿Qué hizo mal el tipo? – jokoon