• Wenn auf dem verwendeten Schlüssel einer Map der < - Operator nicht definiert ist, dann soll es zumindest möglich sein als dritten Typparamter bei der Erzeugung der Map eine alternative Vergleichsfunktion anzugeben. Kann mir jemand sagen wie ich diese Funktion angeben soll und vor allem, welchen Rückgabewert die Map für welches Vergleichsergebnis erwartet. Ich bin einmal davon ausgegangen:
    1 wenn das Objekt größer ist als der Parameter, 0 bei Gleichheit -1 wenn es kleiner ist als der Parameter. Also analog zu den compareTo()-Methoden bei Java.
    Trotzdem funkt’s nicht.
    Hier ist das Beispiel das ich probiert habe:
    Vielleicht kann mir jemand helfen.

    Danke,
    subatomic

    #include <map>
    #include <string.h>

    class Name{
    public:
    char name[20];

    Name(){}
    Name(char *name){strcpy(this->name, name);}

    int compareTo(Name &n){

    return strncmp(name, n.name, 20);
    }
    };

    int main(){


    std::map<Name,Name, int Name::compareTo(Name &n)> m;
    std::map<Name,Name, int Name::compareTo(Name &n)>::iterator i;
    std:: pair<Name,Name> p;

    p.first = *(new Name("Mueller"));
    p.second = *(new Name("Josef"));
    m.insert(p);

    p.first = *(new Name("Faerber"));
    p.second = *(new Name("Franz"));
    m.insert(p);

    p.first = *(new Name("Gerber"));
    p.second = *(new Name("Hubert"));
    m.insert(p);

    for(i = m.begin(); i != m.end(); i++)
    cout << i->second.name << endl;
    return 0;
    }

    "in 1000 years, we will be living machines, or dead gods"

  • mit dem folgende Code sollte es funktionieren :

    #include <iostream.h>
    #include <string.h>
    #include <map>

    class Name {
    public:
    char name[20];

    Name() {
    }
    Name(char *name){
    strcpy(this->name, name);
    }
    };

    struct compareNames {
    bool operator()(Name n1, Name n2) const {
    return strcmp(n1.name, n2.name) < 0;
    }
    };


    int main(){
    std::map<Name, Name, compareNames> m;
    std::map<Name, Name, compareNames>::iterator i;
    std:: pair<Name,Name> p;

    p.first = *(new Name("Mueller"));
    p.second = *(new Name("Josef"));
    m.insert(p);

    p.first = *(new Name("Faerber"));
    p.second = *(new Name("Franz"));
    m.insert(p);

    p.first = *(new Name("Gerber"));
    p.second = *(new Name("Hubert"));
    m.insert(p);

    for(i = m.begin(); i != m.end(); i++)
    cout << i->second.name << endl;
    return 0;
    }

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!