1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

C++: Maps

    • Frage
  • subatomic
  • 26. August 2003 um 21:39
  • Unerledigt
  • subatomic
    5
    subatomic
    Mitglied
    Punkte
    230
    Beiträge
    36
    • 26. August 2003 um 21:39
    • #1

    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"

  • DGA
    5
    DGA
    Mitglied
    Punkte
    210
    Beiträge
    42
    • 28. August 2003 um 11:25
    • #2

    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;
    }

  • subatomic
    5
    subatomic
    Mitglied
    Punkte
    230
    Beiträge
    36
    • 28. August 2003 um 21:44
    • #3

    thx!!
    Hat auf Anhieb funktioniert!

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

  • Maximilian Rupp 27. Dezember 2024 um 12:08

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung