Map mit char* als key



  • Hi,

    funktioniert das in C++ problemlos, eine Map mit const char* als key?
    std::map<const char*, int> myMap;

    Ich mein, wenn ich jetzt was suchen will z.B. mit myMap.find("foo");
    dann wird der doch intern sowas machen (pseudocode):

    function find(T t)   
    foreach key in keylist
       if(key == t)
          // gefunden! return...
    

    Dh. er vergleich einfach 2 char* mit ==? Dh doch, dass er Adressen und NICHT Inhalte vergleicht? Das kann doch dann schief gehen, weil "foo" nicht notwendigerweise die selbe Adresse haben muss wie ein 2. "foo", oder? (Wenn der Compiler zB kein string pooling macht)



  • Für sowas kann man bei std::map Prädikate angeben.



  • template < class Key, class T, class Compare = less<Key>,
               class Allocator = allocator<pair<const Key,T> > > class map;
    

    Standardvergelich ist std::less<char*> . Wenn Du das anders möchtest ->

    typedef std::map<char*, int, MyCompareType> mymap;
    

    Oder Du nimmtst statt char* einfach std::string, wie sich das gehört.



  • Also funktioniert eine Map mit char* als Key ohne eigenen Comparator nicht?

    Dann nehme ich einfach std::string



  • Also funktioniert eine Map mit char* als Key ohne eigenen Comparator nicht?

    Doch, nur nicht so wie du das moechtest.



  • Mapper schrieb:

    Also funktioniert eine Map mit char* als Key ohne eigenen Comparator nicht?

    Dann nehme ich einfach std::string

    Frage mich sowiso warum Du char* möchtest? Ist doch nur kompliziert...


Anmelden zum Antworten