Find in Map



  • Hallo,

    ich habe eine map<Haus, int> welche den Namen und die Kapazitaet eines Hauses beinhalten. Haus ist dabei eine eigene Klasse.

    Ich habe ein weiteres Hausobjekt, die ich in dieser Map suche... allerdings haben diese Objekte keine Kapazitaet. (die möchte ich ja anhand der Map herausfinden)

    2 Häuser sind gleich, wenn sie den selben Namen haben.

    Nach googeln habe ich herausgefundne, dass map den operator< nutzt- den habe ich dann versucht entsprechend anzupassen

    bool operator< (const Haus& F1, const Haus& F2)
    {
    return (F1.get_Name()< F2.get_Name());

    }

    er bringt mir nun aber keine Fehlermeldung, sucht das Objekt aber auch nicht.

    sondern hängt an folgender Stelle in einer Endlosschleife fest:

    while (iZuordnung != Zuordnung.end())

    iKapazitaetHaus=KapazitaetHaus.find(iZuordnung->getHaus());

    Habe ich irgendwas vergessen anzupassen.

    danke im Vorraus


  • Mod

    Naja, da wird deine Abbruchbedingung wohl niemals erfüllt. Dein Problem liegt weder bei find noch bei deinem Vergleichsoperator. Was ist denn Zuordnung und was hat Zuordnung.end() mit dem Ergebnis der Suche zu tun? Wenn ich das recht sehe, vergleichst du da Iteratoren aus völlig verschiedenen maps, dazu sogar der eine noch ein Iterator nach dem Ende, der andere zeigend auf das gefundene Element. Klar, dass die niemals gleich werden!

    Und wieso verwendest du ungarische Notation? Und dazu auch noch ultra verwirrend, da i bei dir offensichtlich kein Integer ist!



  • ok habe ich wohl wieder die Hälfte vergessen auszuschreiben. Ok ich gestehe meine Namensgebung ist schlecht 🙂

    set<Haus> Zuordnung;
    map<Haus,int> KapazitaetHaus
    map<Haus,int> : iterator iKapazitaetHaus
    
    Zuordnung wird mit Häusern befüllt....
    
    set<Haus>: iterator iZuordnung=Zuordnung.begin();
    
    while (iZuordnung!=Zuordnung.end())
    (also solange es da noch Häuser im Set gibt)
    
    iKapazitaetHaus=KapazitaetHaus.find(iZuordnung->getHaus());
    

    iZuordnung->getHaus()= Gib mir ein Hausobjekt aus dem Set zurück, von dem ich die Kapazitaet bestimmen möchte

    Danke für die Bemühungen,



  • Danke habe den Fehler gefunden...


  • Mod

    Ich sehe nicht, dass iZuordnung irgendwo verändert würde, kein Wunder, dass die Schleife nie abbricht. Wieso eigentlich while anstatt for? Dann wäre dir dieser Fehler sofort aufgefallen.



  • Gibt hierfür keinen Grund... vielleicht die Lehre für das nächste Mal 🙂


Anmelden zum Antworten