Schnelle Hilfe: std::map mit string als Key?



  • Moin!

    Ich habe folgendes:

    std::map<std::string, double> m_hash;
    

    Da bekomm ich beim Compilieren aber zig Fehlermeldungen vom MinGW(3.4.5):

    c:/Programme/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_map.h:89: error: less' has not been declared c:/Programme/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_map.h:89: error: expected>' before '<' token
    c:/Programme/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_map.h:89: error: expected unqualified-id before ',' token
    c:/Programme/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_map.h:638: error: expected ,' or...' before '<' token

    [...]

    Meine Recherchen haben ergeben, dass halt keine Vergleichsfunktion für Strings implementiert ist.

    Folgende Ansätze brachten keinen Erfolg:

    std::map<std::string, double, std::less<std::string> > m_hash;
    
    struct strCmp {
        bool operator()( const char* s1, const char* s2 ) const {
          return strcmp( s1, s2 ) < 0;
        }
      };
    
    std::map<std::string, double, strCmp> m_hash;
    

    Was soll ich nur tun 😡 😡 😕



  • #include <map>
    #include <string>
    

    Übrigens: std::map ist keine Hash-Map.


  • Mod

    Neeerv schrieb:

    Meine Recherchen haben ergeben, dass halt keine Vergleichsfunktion für Strings implementiert ist.

    Quatsch. Dein Fehler liegt anderswo. std::string und map vertragen sich ganz wunderbar. Zeig mal ein minimales Beispiel welches deinen Fehler erzeugt.



  • Nexus schrieb:

    #include <map>
    #include <string>
    

    Übrigens: std::map ist keine Hash-Map.

    gibts sowas wie eine hashmap?

    ich versuche den fehler weiter einzugrenzen...



  • ok fehler gefunden, es wurde

    //#include <bits/stl_map.h>

    neben der <map> inkludiert. keine ahnung was das ist, aber daher kamen auch die fehlermeldungen


  • Mod

    Neerv schrieb:

    Nexus schrieb:

    Übrigens: std::map ist keine Hash-Map.

    gibts sowas wie eine hashmap?

    Im aktuellen Standard nicht, aber im nächsten wird es das geben. Bis dahin ist es aber schon im Technical Report 1 (TR1) als unordered_map vorgeschlagen und wird unter diesem Namen auch schon von sehr vielen Compilern unterstützt.



  • Nexus wollt andeuten, das Du deine Includes noch mal überpruefen sollst!
    Deine fehlermeldung sieht ganz danach aus, also ob er mit std::string gar nix anzufangen weiss. Ich vermute du hasst <map> includiert (sonst wuerd er mosern das map kein element von std:: waer) aber <string> nicht direkt.

    und hashmaps gibt es. Iss in den "alten" STL-Impls kein standard ... aber einige haben es trotzdem. Glaub im neuen Standard is hashmap dabei.

    Notfalls boost consultieren die hat sicher sowas.

    aber prinzipiell, sicher das Du ne hashmap willst? Sicher dass deine Daten dafuer geeignet sind ?

    Ciao ...


Anmelden zum Antworten