stable_sort
-
Aus Versehen doppelt gepostet,,kann gelöscht werden.
-
ist das was du willst ?
#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<<"."; return os; } bool lower_loc( const daten & d1, const daten & d2 ) { return d1.wohnort < d2.wohnort; } bool lower_name( const daten & d1, const daten & d2 ) { return d1.name < d2.name; } 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"; } if(i==6) { temp.name="Torsten";temp.wohnort="Magdeburg"; } return(temp); } int main() { deque<daten> container(6); deque<daten>::iterator iter; generate(container.begin(),container.end(),init); cout << "\nunsortiert :" << endl; for(iter=container.begin();iter!=container.end();++iter) cout<<*iter<<endl; cout << endl; cout << "\nnach namen :" << endl; stable_sort(container.begin(),container.end(),lower_name ); for(iter=container.begin();iter!=container.end();++iter) cout<<*iter<<endl; stable_sort(container.begin(),container.end(),lower_loc ); cout << "\nnach wohnort :" << endl; for(iter=container.begin();iter!=container.end();++iter) cout<<*iter<<endl; cout << endl; return 0; }Kurt
-
Vielen Dank!!

Aber wieso Präfix statt Postfix Schreibweise ->++iter??
-
AJ_Styles schrieb:
Aber wieso Präfix statt Postfix Schreibweise ->++iter??
Bei postfix muss eine kopie erzeugt werden bei präfix nicht.
Kurt
-
Allgemein oder nur beim Gebrauch von Iteratoren?
-
immer
Edit: naja bei pod's kann der compiler die kopie in einem register halten und dann ist der Laufzeit unterschied minimal aber nicht null
-
OK,,danke nochmals

-
ZuK schrieb:
immer
Edit: naja bei pod's kann der compiler die kopie in einem register halten und dann ist der Laufzeit unterschied minimal aber nicht nullnaja, der optimierer wirds schon richten, hoffen wir. im übrigen muss eine register kopie nicht unbedingt etwas kosten, das kann der register-allokator auch durch aliasing erreichen (kopieren müssen wir erst, wenn eines der aliase verändert werden soll, also im prinzip COW).
-
stable_sort(container.begin(),container.end(),lower_name );Wieso werden der Funktion lower_name keine Argumente übergeben? Sie benötigt doch 2 Argumente vom Typ const daten & d1 und const daten & d2 ??
-
AJ_Styles schrieb:
Wieso werden der Funktion lower_name keine Argumente übergeben? Sie benötigt doch 2 Argumente vom Typ const daten & d1 und const daten & d2 ??
Weil das hier kein Aufruf von lower_name sein soll, sondern die Übergabe eines Funktionsobjekts. Das Aufrufen übernimmt stable_sort.