Crush Geschrieben 5. Oktober 2004 Geschrieben 5. Oktober 2004 Wie der Titel schon sagt. Ich hab mal probiert, wie schnell ich eine eigene String-Hashmap hinbekomme und bin WESENTLICH schneller als die CMapStringToString, obwohl ich sogar noch eine Multimap eingebaut habe (bei Tests bis zu 2500x schneller, was mich sehr stutzig gemacht hat). Bei kleinen Umfängen ist sie ordentlich einsetzbar, aber sobald man mal mit über 20000 Einträgen arbeitet, fängt die CMapStringToString mehr und mehr an zu kriechen - quadratisch in der Dauer steigend zum Umfang, obwohl ich sie mit einer festen Hashmap-Größe vorbelege (Ein Blick auf den Speicher hat aber gezeigt, daß sie trotzdem ständig reorganisiert wird)! Immerhin arbeitet sie ansonsten zuverlässig. Die hash_multimap (std) ist erheblich schneller (wenn auch noch lange nicht so schnell wie meine Hash-Implementierung), aber irgendwie ziemlich empfindlich. Die "normale" Benutzung (über map[Key]=Value; führt komischerweise zu einem sehr seltsamen Verhalten, genauso wie die map.insert(pair(Key,Value)). Nur eine Variante von .find hat funktioniert. Nach einer kleinen Anzahl Einträge wird die Map nicht mehr erweitert und die Funktionsaufrufe landen im Nirvana ohne jegliche Fehlermeldung! Abfragen zeigen dann immer wieder auf den gleichen Wert. (das kann so doch nicht im Sinne des Erfinders sein?) Ich jedenfalls habe mich entschieden lieber meine Version, die wenigstens ordentlich funktioniert zu nehmen, anstatt die bugbehafteten Standard-Hashmaps. Meine Frage: Ist es tatsächlich so, daß die Standard-Hash-Klassen einfach extrem mies programmiert sind und ich das nur noch nicht mitbekommen habe? Zitieren
Guybrush Threepwood Geschrieben 6. Oktober 2004 Geschrieben 6. Oktober 2004 Also ich kann da jetzt nicht so viel zu sagen. Aber wie sieht es denn mit der Kompatiblität deiner Map zu verschiedenen Systemen und Architekturen aus? Zitieren
Klotzkopp Geschrieben 6. Oktober 2004 Geschrieben 6. Oktober 2004 Nur eine Variante von .find hat funktioniert. Kannst du dafür ein Beispiel geben? Meine Frage: Ist es tatsächlich so, daß die Standard-Hash-Klassen einfach extrem mies programmiert sind und ich das nur noch nicht mitbekommen habe? Da der Standard nicht vorschreibt, wie die Containerklassen zu implementieren sind, kann man da keine pauschale Antwort geben. Welche STL-Implementierung benutzt du? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.