SwordMaster Geschrieben 1. Februar 2008 Geschrieben 1. Februar 2008 Hallo Zusammen, ich suche nach einer Möglichkeit Arrays mit String- Schlüsseln zu verwenden. Also nicht array[1] = "abc". sondern array["abc"] = 1. Am bestern wärs wenn ich nicht nur Integer sondern auch Strings oder HWNDs verwalten kann. Ein bekannter meinte es gäbe eine Hash Table der stl. Aber irgendwie bekomme ich das ganze nicht zum laufen. Ich verwende Visual Studio 6.0. Bisher hab ichs mit #include <ext/hash_map> oder #include "map.h" versucht. Immer kann VS die Include Datei nicht finden. Muss ich dazu noch irgend ein SDK zusätzlich installieren? Ist mein Visual Studio evtl doch schon zu alt? Oder was mache ich falsch? Viele Grüße Stefan Zitieren
Klotzkopp Geschrieben 1. Februar 2008 Geschrieben 1. Februar 2008 Immer kann VS die Include Datei nicht finden. Muss ich dazu noch irgend ein SDK zusätzlich installieren? Ist mein Visual Studio evtl doch schon zu alt?MSVC 6 ist sehr alt. Selbst vier Versionen später, in VC 2008, sind die Erweiterungen des TR 1 (und dazu zählt ext/hash_map, soweit ich weiß) nur als Zusatzpaket verfügbar. Eine Hashmap brauchst du aber IMHO gar nicht, eine einfache Map tut's auch. Der Header dazu heißt <map>, und der sollte auch in VC6 zu finden sein. Zitieren
SwordMaster Geschrieben 1. Februar 2008 Autor Geschrieben 1. Februar 2008 Hi Klotzkopp Ich war schon ein paar jährchen nichtmehr aktiv. Aber schön dass ihr die schnelle reaktionszeit beibehalten habt :-). Bald werde ich mir einen neuen PC (mit Vista) kaufen. Spätestens dann werde ich mich mal um eine neuere version von VS umsehen müssen. Aber was man gewöhnt ist gibt man halt ungern her :-). Ich habs jetzt ausprobiert, funktioniert auch soweit schon ganz gut. Vielen Dank std::map<char *,int> paar; paar["Key"] = 1; paar["Key2"] = 16; Jedoch bekomme ich ein 7 Warnungen.... z.B. C:\WinLab\ForeignEditor\ForeignSkriptParser.cpp(111) : warning C4786: 'std::reverse_bidirectional_iterator<std::_Tree<char *,std::pair<char * const,int>,std::map<char *,int,std::less<char *>,std::allocator<int> >::_Kfn,std::less<char *>,std::allocat or<int> >::iterator,std::pair<char * const,int>,std::pair<char * const,int> &,std::pair<char * const,int> *,int>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert Weißt du evtl ob/was ich falsche mache? Viele Grüße Stefan Zitieren
Klotzkopp Geschrieben 1. Februar 2008 Geschrieben 1. Februar 2008 Jedoch bekomme ich ein 7 Warnungen.... z.B. ... Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert Die Warnung C4786 kannst du getrost ignorieren. Der VC6-Debugger hat bei der Länge der Bezeichner eine Beschränkung auf 255 Zeichen. Durch die verschachtelten Templates der Standardbibliothek ist diese Grenze schnell erreicht, das hat aber keine Auswirkung auf die Lauffähigkeit des Programms. Allerdings hast du da ein anderes Problem: Dein Schlüssel-Typ ist char*. Das ist insoweit problematisch, dass std::map den operator< benutzt, um die Elemente zu sortieren. Der Kleiner-Operator für char* vergleicht aber nur die Adressen der Strings, nicht die Inhalte. Das funktioniert zwar, aber die Sortierungsreihenfolge wird alles mögliche sein, nur nicht alphabetisch. Du könntest ein benutzerdefiniertes Sortierprädikat als dritten Templateparameter angeben. Einfach ist es IMHO aber, wenn du als Schlüsseltyp std::string benutzt. 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.