000
31.01.2007, 15:54 Uhr
flappinski
|
Hallo Leute, ich habe folgendes Problem: Ich lese ein Art Info-Datei in eine Map ein, wo der Schlüssel des Paares immer das erste Feld der Zeile, ist, ungefähr so:
C++: |
while(getline(In, line)){ line_map[string_to_map(line,ptgt_divisor)]=line; }
|
line_map ist eine map<string,string> und die Funktion string_to_map holt das erste Feld raus. Diese Funktion ist natürlich als inline eingebunden und kostet nur Bruchteile der Zeit. Womit wir schon bem Thema wären:
Bei 12 Mio. Zeilen dauert das ziemlich lange ( 1min.) im Gegensatz zum reinen einlesen (10 sec). Folgendes ist genauso langsam
C++: |
line_map[line]=line;
|
Das hier allerdings kommt der reinen Einlesegeschwindigkeit schon sehr nahe:
C++: |
line_map["test"]=line;
|
Ich denke, also, dass die meiste Zeit damit vergeht, diese Paare zu bilden, bzw. den Speicherplatz dafür zu allozieren. Bei Vektor gab es doch dafür sowas wie std::vector::reserve. Gibt es irgendwas vergleichbares bei einer Map? Habt ihr sonstige Tips? Vielen Dank, Stephan |