Vector inhalt sortieren
-
Hallo,
gibt es eine fertige Funktion, die strings in vector sortiert.
dankeWenn man nicht weisst,...fragt

-
Ich will vermeiden die daten selber zu sortieren ...wie puble sort verfahren
-
versuch's mal mit std::sort() (zu finden im Header <algorithm>).
PS: Meinst du mit "string" std::string oder char*? (in letzterem Fall müsstest du sort() eine ordentliche Vergleichsfunktion mitgeben)
-
#include <algorithm> #include <vector> #include <string> int main() { std::vector< std::string> strvec; // strvec mit irgendwelchen strings füllen std::sort(vec.begin(), std::end()); // strvec ist jetzt sortiert }
-
Wünderpar.
vielen vielen dank
dachte sort geht nur für tabellen und nicht auch für vectors.
das erleichtert mir doe arbeit und die performanc.
noch mal vielen dank
-
dokdok schrieb:
dachte sort geht nur für tabellen und nicht auch für vectors.
Das ist ja das gute an der STL - alle Komponenten arbeiten Hand in Hand.
(und alles, was einen geeigneten Iterator bereitstellt, kann auch sortiert werden ;))
-
Danke
-
jetzt noch frage.
wenn ich vector von type struct..z.Bstruct XXX { string name; string vorname; int alt; }; vector<XXX> list;in list jetzt verschiedene sätze. wie geht es denn mit Sort
-
die name sortieren
-
Bin mir nicht sicher obs noch einfacher geht, aber so geht es z.B. zumindest

bool less_name(const XXX& a, const XXX& b) { return a.name < b.name; } /* ... */ std::sort(list.begin(), list.end(), less_name);
-
bool less_name(const XXX& a, const XXX& b) { return a.name < b.name; } /* ... */ std::sort(list.begin(), list.end(), less_name);in sort was soll ich übergeben bei aufruf less_name.
less_name ist ein Funktionsname oder!
-
error C2065: 'a': nichtdeklarierter Bezeichner
error C2065: 'b': nichtdeklarierter Bezeichner
-
Dann machst Du es falsch.
(Sorry, aber weniger informativ ging wohl wirklich nicht
)EDIT: ja, "less_name" ist der Name der Funktion.
-
#include <vector> #include <iostream> #include <string> using namespace std; struct XXX { string lastname; int age; XXX(string l, int a) : lastname(l), age(a){} }; bool operator<(const XXX& X1, const XXX& X2) { return X1.lastname < X2.lastname; } int main() { vector <XXX> List; List.push_back(XXX("Bernie", 15)); List.push_back(XXX("Cernie", 11)); List.push_back(XXX("Aernie", 17)); List.push_back(XXX("Dernie", 19)); sort (List.begin(), List.end()); for(vector<XXX>::iterator i = List.begin(); i != List.end(); ++i) cout << i->lastname << " ist " << i->age << endl; }
-
Ok, operator< ist einfacher als less_name, das gebe ich zu

@dokdok: Wenn das Beispiel von KPC so bei Dir funzt, müsstest Du auch herausfinden warum das mit less_name nicht ging, das ist nämlich bis auf den Namen "less_name" (und dessen Angabe hinten bei sort(...)) völlig identisch.
-
Ja es hat geklappt mit Operator danke.
mit less_name aber nicht. der debbger wirft mich in algorithm classe
-
dokdok schrieb:
mit less_name aber nicht. der debbger wirft mich in algorithm classe
Randfrage: Was für eine Fehlermeldung?
-
Folgendes funktioniert bei mir ebenfalls:
bool compare(const XXX& X1, const XXX& X2) { return X1.lastname < X2.lastname; } //... sort (List.begin(), List.end(),compare);Der restliche Code wie eben!
KaPtainCugel
-
müssen unbedingt vector sein?
List ist effektiver falls es sich um insert, sortierung geht
-
netrobot schrieb:
müssen unbedingt vector sein?
Muß nicht - sort() arbeitet mit allem zusammen, was einen Random-Access-Iterator bereitstellt (vector, deque, C-Style Arrays).
List ist effektiver falls es sich um insert, sortierung geht
list hat keine Random-Access-Iteratoren, da funktioniert sort() nicht - aber list hat eine Memberfunktion, die das ersetzt.
(PS: Du könntest auch ein set verwenden, da brauchst du nicht mehr zu sortieren ;))
-
CStoll schrieb
Wasfür eine Fehlermeldung?error C2065: 'a': nichtdeklarierter Bezeichner
error C2065: 'b': nichtdeklarierter Bezeichner