Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Array mit String zugriff

Empfohlene Antworten

Veröffentlicht

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

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.
  • Autor

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

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.