Leistungsunterschied zwischen map und unordered_map in C ++

Habe ich eine einfache Anforderung, ich brauche eine Karte von Typ . aber ich brauche schnellsten theoretisch möglichen Ladezeiten.

ich habe sowohl die Karte und der neu vorgeschlagenen unordered_map aus tr1
ich fand, dass zumindest während der Analyse einer Datei und erstellen Sie die Karte, indem Sie ein element zu einem Zeitpunkt.

Karte dauerte nur 2 Minuten, während unordered_map dauerte 5 Minuten.

Als ich es ist Teil der code ausgeführt werden kann auf Hadoop-cluster und enthält ~100 Millionen Einträge, ich brauche kleinstmöglichen Ladezeiten.

Auch andere nützliche Informationen:
derzeit werden die Daten (keys), die eingefügt ist in den Bereich von ganzen zahlen aus 1,2,... , ~10 Millionen.

Kann ich auch verhängen Benutzer angeben, max-Wert und zu verwenden, um wie oben beschrieben, wird deutlich, dass Wirkung meine Umsetzung? (ich hörte Karte basiert auf rb Bäume und einfügen in aufsteigender Reihenfolge führt zu einer besseren Leistung (oder schlimmsten?) )

hier ist der code

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(); 
}

Vorläufige Lösung: Nach überprüfung der Kommentare und Antworten, ich glaube, eine Dynamische C++ - Arrays wäre die beste option, da die Umsetzung verwenden dichter Schlüssel. Dank

InformationsquelleAutor der Frage | 2010-02-28

Schreibe einen Kommentar