stable_sort



  • Hi,,

    folgendes Programm habe ich geschrieben:

    #include<iostream>
    #include<algorithm>
    #include<deque>
    #include<functional>
    #include<string>
    using namespace std;
    
    struct daten
    {
    	string name;
    	string wohnort;
    };
    
    ostream& operator<<(ostream& os,daten& d)
    {
    	os<<d.name<<" wohnt in "<<d.wohnort<<"."<<endl;
    	return os;
    }
    
    daten init()
    {
    	daten temp;
    	static int i=0;
    	i++;
    	if(i==1) { temp.name="Bernd";temp.wohnort="Rostock"; }
    	if(i==2) { temp.name="Kai";temp.wohnort="Rostock"; }
    	if(i==3) { temp.name="Tanja";temp.wohnort="Magdeburg"; }
    	if(i==4) { temp.name="Chris";temp.wohnort="Rostock"; }
    	if(i==5) { temp.name="Tina";temp.wohnort="Stuttgart"; }
    	return(temp);
    }
    
    int main()
    {
    	deque<daten> container(5);
    	deque<daten>::iterator iter;
    	generate(container.begin(),container.end(),init);
    	stable_sort(container.begin(),container.end(),greater<string>());                                   
                                            //funktioniert nicht ^^^^^^^^
    	for(iter=container.begin();iter!=container.end();iter++)
    		cout<<*iter<<endl;
    	return 0;
    }
    

    Ich würde gerne erst nach dem Wohnort sortieren, dann nach dem Namen. Damit die relative Reihenfolge erhalten bleibt, möchte ich 2 stable_sort-Algorithmen nutzen. Nur wie formuliere ich den Algorithmus, dass er z.B. nach dme Wohnort suchen soll. Dem Vergleichsobjekt kann man ja nur den Datentyp der zu sortierenden Werte übergeben, wie z.B. "string", und nicht "daten.wohnort".

    Kann mir jemand helfen??



  • Sorry für das doppelte Post,,



  • Schreib dir eine eigene Vergleichsklasse. Für die überlädts du bool operator () (const daten& l, const daten& r) und gut is.
    Übrigens benutzt man normalerweise den Präfixinkrement (++iter statt iter++).




Anmelden zum Antworten