Permalänk
Medlem

Sortering av en vektor.

Nu var jag här igen med mer bekymmer.

Har kod som ser ut cirkus såhär (något nerkortad):

struct highscore { string name; string points; string koeff; } ... void view_highscore() { vector< highscore > hs; highscore temp; int n; ifstream file("hs.mm"); while ( !file.eof() ) { getline(file, temp.name, '|'); getline(file, temp.points, '|'); getline(file, temp.koeff); hs.push_back( temp ); temp.name.erase(); temp.points.erase(); temp.koeff.erase(); } if ( file.eof() ) // Filen är slut. { hs.erase(hs.end()); // Ta bort den sista vektorn } file.close(); cout << "Antal: " << hs.size() << endl; for(n=0;n<hs.size();++n) { cout << hs[n].name << " -- " << hs[n].points << "--" << hs[n].koeff << endl; } }

Finns det något smidigt sätt att sortera en vektor på som kan tänkas funka? Har provat bubblesort och det resulterar bara i en core dump, men det kanske beror på något annat.

C++ har ju en inbyggd sort() funktion, men det tips jag fått (att använda sort(hs.begin(), hs.end()); kan jag inte få att funka.

Visa signatur

Light travels faster than sound. Is that why some people appear to be smart before they speak?
It's a big rock. I can't wait to tell my friends. They don't have a rock this big.

Permalänk
Medlem

Du måste endra överlagra < eller > för highscore, eller skriva en funktion som jämför två highscore-strukturer.

bool operator<( const highscore& h1, const highscore& h2 ) { return h1.points < h2.points; } ... sort( hs.begin(), hs.end() ); eller bool hs_cmp( const highscore& h1, const highscore& h2 ) { return h1.points < h2.points; } ... sort( hs.begin(), hs.end(), hs_cmp );

std::sort använder typens < som standard. Vill man använda > anropar man sort( hs.begin(), hs.end(), greater< highscore >() ); som finns i headern functional.

Permalänk
Medlem

Lägg till algorithm.h och ta en titt på sort()

Lycka till..

edit: DOH! Du var före.. igen!

Visa signatur

Linux är inget operativsystem.
http://www.gnu.org/gnu/linux-and-gnu.html

Permalänk
Medlem

Heh, och filen heter algorithm utan .h Precis som alla standardheaders

Permalänk
Medlem

Tackar.

Du anar inte hur mycket jag lärt mig de senaste veckorna av dig

Visa signatur

Light travels faster than sound. Is that why some people appear to be smart before they speak?
It's a big rock. I can't wait to tell my friends. They don't have a rock this big.

Permalänk
Medlem

Hmm, funkar verkligen hs.erase(hs.end());? end är ju elementet bakom slutet på vectorn. hs.end() - 1 är sista elementet, eller så finns hs.back() som också är sista

Permalänk
Medlem

hs.erase(hs.end()); tar bort den tomma vektor som alltid envisades med att komma med innan jag lade dit raden så jag utgår från att det funkar, annars är det placebo

Visa signatur

Light travels faster than sound. Is that why some people appear to be smart before they speak?
It's a big rock. I can't wait to tell my friends. They don't have a rock this big.