C++ sortering af liste hjælp.

Diverse d.  12. februar. 2011, skrevet af unnamet
Vist: 921 gange.

unnamet
 
Passiv Hwt crew
Tilføjet:
12-02-2011 20:17:29
Svar/Indlæg:
5258/240
Hej alle.

Sidder der ikke en haj her inde som kunne give et hint til hvordan jeg løser et problem i C++.

Jeg har en liste af structs. I structene er der bla et tal.

Hvordan sortere jeg listen efter dette tal?

Peter


Tråden blev redigeret 1 gang, sidst af unnamet d. 12-02-2011 20:17:50.
Illuminati
 
Elitebruger
Tilføjet:
12-02-2011 23:50:10
Svar/Indlæg:
10398/435
Kender ikke c++, men google 🙂

http://stackoverflow.com/quest...

Kan det bruges?


unnamet
 
Passiv Hwt crew
Tilføjet:
13-02-2011 00:15:09
Svar/Indlæg:
5258/240
Ja okay.

Men nu skal det gøres i c++ med sort funktionen.

det er til en opgave nemlig 🙂


scheea2000
 
Superbruger
Tilføjet:
13-02-2011 11:17:36
Svar/Indlæg:
818/58
Jeg går ud fra det er STL I sidder med?

Lidt inspiration: http://www.cplusplus.com/refer...


Zorba
 
Superbruger
Tilføjet:
13-02-2011 15:17:37
Svar/Indlæg:
1142/59
Du skal lave din egen compare funktion der tager imod dine structs, hvor du inde i den compare funktion sammenligner den bestemte værdi i dine structs. Det kan være noget ala

bool compare(const dinstruct& x, const dinstruct& y)
{
return x.dinvar < y.dinvar;
}

sort(dinliste.begin(), dinliste.end(), compare);


unnamet
 
Passiv Hwt crew
Tilføjet:
13-02-2011 16:07:38
Svar/Indlæg:
5258/240
Hvad er x og y værdierne?

Og jeg går du fra at bool compare er et std udtryk i c++

Og x.dinvar er en del af min struct ikke?


Svaret blev redigeret 1 gang, sidst af unnamet d. 13-02-2011 16:11:30.


Zorba
 
Superbruger
Tilføjet:
13-02-2011 16:17:27
Svar/Indlæg:
1142/59
x og y kan også hedde s1 og s2... det er altså lige meget hvad du kalder dem. Lad os f.eks. forestille at du har en liste med 2 items. Når så du kalder sort, så kalder den compare metoden, hvor x bliver lig det første item i listen og y bliver lig det andet item i listen. Du kan dermed tilgå de 2 structs data via x.hvad-du-nu-vil-hente og y.hvad-du-nu-vil-hente. Hvis du så f.eks. har en int variabel i din struct kaldet alder, så kan du ændre compare metodens indhold så den gør noget ala dette:

return x.alder < y.alder;

Den vil så sortere listen ud fra alder værdien og dermed vil den struct med laveste alder blive den første i listen.

PS: bool er standard i C++, men ikke i C. I almindelig C er du selv nødt til at lave typedef for at understøtte bool.


Svaret blev redigeret 1 gang, sidst af Zorba d. 13-02-2011 16:19:30.


unnamet
 
Passiv Hwt crew
Tilføjet:
13-02-2011 16:19:06
Svar/Indlæg:
5258/240
okay, lækkert.

Prøver lige.


Zorba
 
Superbruger
Tilføjet:
13-02-2011 16:23:53
Svar/Indlæg:
1142/59
Hvis du evt. ikke gider læse dig frem til det på nettet, så kan jeg anbefale dig Accelerated C++ (ISBN: 9780201703535). Jeg kender mange der har bestået deres C++ kurser med denne bog uden overhovedet at komme til forelæsninger/undervisning. Sort og compare er ganske godt forklaret i denne bog ligesom alle de andre grundlæggende ting i C++.

Svaret blev redigeret 1 gang, sidst af Zorba d. 13-02-2011 16:25:33.


unnamet
 
Passiv Hwt crew
Tilføjet:
13-02-2011 16:26:54
Svar/Indlæg:
5258/240
den er også på vej :)

men jeg kan ikke få det til at virke.

Min struct ser sådan ud:

struct bog_info bog;
vector <bog_info> bog_liste;

// Bog 1
bog.Title = "Den russiske trilogi";
bog.Forfatter = "Leif Davidsen";
bog.Udgivelsesaar = 1997;
bog.ISBN = "87-595-1918-5";
bog.ejer = "Peter Rasmussen";

og det jeg har prøvet at lave til at sortere med ser sådan ud:

bool compare(const bog& x, const bog& y)
{
return x.Udgivelsesaar < y.Udgivelsesaar;
}

sort(bog.begin(),bog.end(),compare);

Ser det rigtig ud?


Zorba
 
Superbruger
Tilføjet:
13-02-2011 16:38:00
Svar/Indlæg:
1142/59
#9 er du ved at tage 02393 på DTU? Opgaverne lyder nemlig utrolig meget som dem fra det kursus samt at du har bestilt den bog DTU typisk anbefaler til det kursus 🙂


unnamet
 
Passiv Hwt crew
Tilføjet:
13-02-2011 16:42:12
Svar/Indlæg:
5258/240
Præcis det kursus :)


Zorba
 
Superbruger
Tilføjet:
13-02-2011 16:53:19
Svar/Indlæg:
1142/59
Jeg håber at din struct bog_info er defineret i en .h fil da du ikke viser en rigtig struct her i tråden. En rigtig struct, ud fra din struktur, bør se sådan her ud:

struct bog_info {
string Titel;
string Forfatter;
int Udgivelsesaar;
string ISBN;
string Ejer;
};

Dermed skal du så gøre følgende:

struct bog_info bog;
vector<bog_info> bog_liste;

bog.Titel = "...";
bog.Forfatter = "...";
bog.Udgivelsesaar = 1997;
bog.ISBN = "...";
bog.Ejer = "...";

bog_liste.push_back(bog);

bool compare(const bog_info& x, const bog_info& y) {
return x.Udgivelsesaar < y.Udgivelsesaar;
}

sort(bog_liste.begin(), bog_liste.end(), compare);

Du vil dog kun få en liste med 1 bog ud fra ovenstående. Du er derfor nødt til at oprette flere bøger og tilføje til din liste.


Svaret blev redigeret 1 gang, sidst af Zorba d. 13-02-2011 16:53:34.


unnamet
 
Passiv Hwt crew
Tilføjet:
13-02-2011 17:36:45
Svar/Indlæg:
5258/240
Jeg har defineret structen i en .h fil. Og jeg har 7 bøger ville bare ikke lige putte det hele ind her

Jeg får en fejl med at x og y was not declared in this scope


Svaret blev redigeret 1 gang, sidst af unnamet d. 13-02-2011 17:46:31.


unnamet
 
Passiv Hwt crew
Tilføjet:
14-02-2011 14:21:43
Svar/Indlæg:
5258/240
op