for( iter = vList.begin( ); iter != vList.end( ); iter++ ), geht nicht? Wieso?



  • struct LISTE {
    
    	char szCountry2[  8 ];
    	char szCountry3[  8 ];
    	char szFullName[ 64 ];
    
    	bool operator <( const LISTE *newItem ) const {
    
    		return( this->szFullName < newItem->szFullName );
    	}
    };
    

    -->

    struct LISTE {
    
    	char szCountry2[  8 ];
    	char szCountry3[  8 ];
    	char szFullName[ 64 ];
    
    	bool operator <( const LISTE &newItem ) const {
    
    		return( this->szFullName < newItem.szFullName );
    	}
    };
    

    Edit:

    Außerdem bin ich mir nicht sicher, ob man bei arrays einfach größer/kleiner Vergleiche durchführen kann.
    (mit lexicographical_compare() oder so dürfte es aber gehen)

    Edit2:
    Ich Dummkopf.
    Natürlich gehen die Vergleiche, allerdings werden nur die Zeigeradressen verglichen.



  • Hm es kommt zwar kein Fehler mehr, aber sortiert ist die liste anscheind nicht.



  • Schau mal bitte, was ich bei "Edit2" geschrieben habe.



  • EDIT: zu spät



  • Ich möchte aber die Werte und nicht die Adressen vergleichen lassen.

    PS: Bzw. wie soll ich lexicographical_compare benutzen ein einziges Array zu sortieren?



  • Dann nutze wie schon geschrieben lexicographical_compare() aus <algorithm> an. Oder bastel dir eine eigene schleife und geh die Buchstaben durch.



  • Am einfachsten wird wohl fürs erste strcmp sein. Die lexicographical_compare Variante könnte aber schneller sein, wenn man die Länge der Strings wüsste.

    @TObi:
    Du sollst es nicht zum sortieren benutzen, sondern zum vergleichen. Mit strcmp oder lexicographical_compare kannst Du die Inhalte zweier (strcmp: nullterminierten) char-Arrays vergleichen.



  • Es ärgert mich aber irgendwie, denn ich bin mir sicher das ich das schon einmal mit dem überladen des '<' operators gemacht habe, versteh wirklich net wieso das jetzt son problem ist für mein compilier ...



  • Der Compiler macht genau das was er soll. Nur du sagst ihm, dass er was anderes machen soll als du möchtest 😃



  • Wieso sag ich ihm was anderes?



  • T0bi schrieb:

    Es ärgert mich aber irgendwie, denn ich bin mir sicher das ich das schon einmal mit dem überladen des '<' operators gemacht habe, versteh wirklich net wieso das jetzt son problem ist für mein compilier ...

    Es geht doch garnicht um den operator<, sondern um das, was darin passiert. Wenn die Operator-Funktion (konstante) Referenzen annimmt, funktioniert das ganze einwandfrei. Das Problem ist: Im operator< sagst Du ihm, dass er zwei Zeiger vergleichen soll. Das willst Du aber nicht, sondern Du willst die Inhalte vergleichen. Das macht man mit strcmp oder lexidings_compare. Im ansonsten vollkommen korrekten operator<.



  • also quasie so:

    bool operator <( const LISTE &newItem ) const {
    
         return( lexicographical_compare( ... );
    }
    

    ???

    Aber wie muss ich das dann in der lexicographical_compare schreiben?



  • bool operator <( const LISTE &newItem ) const {
    
    		return( lexicographical_compare( this->szFullName, this->szFullName + strlen( this->szFullName ),
    								         newItem.szFullName, newItem.szFullName + strlen( newItem.szFullName ) ) );
    	}
    

    olala.. es geht xD Danke.
    Kann mich trotzdem nicht daran erinnern das ich das damals auch so gemacht habe.
    Trotzdem dake.

    Gruß Tobi.



  • Wahrscheinlich hast du damals std::string benutzt.


Anmelden zum Antworten