JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

stl::list sortieren
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 10.09.2005, 10:13    Titel: stl::list sortieren Antworten mit Zitat

Ich habe eine Liste in der eine Struktur gespeichert ist. Jetzt möchte ich die Liste nach einem Element aus der Struktur sortieren. Wie geht das am einfachsten?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 10.09.2005, 10:25    Titel: Antworten mit Zitat

Mit std::sort(). Du mußt dabei sicherstellen, dass ein < Operator für deinen Typ definiert ist. Ansonsten kannst du eine Funktion, die für das Sortieren verwendet wird angeben:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vclrfAlgorithmSort.asp

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 10.09.2005, 10:34    Titel: Antworten mit Zitat

Christian Rousselle
std::sort fällt bei std::list absolut flach, da die architektur von std::list einen Zugriff auf innere Objekte nicht zulässt. std::sort funktioniert sonst bei fast allem. Für std::list gibt es std::list::sort Wink

Jonathan_Klein
Hab ich dir nicht damals etwas gegeben wo gezeigt wird wie man einen std::vector nach kriterien sortiert?
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 10.09.2005, 11:32    Titel: Antworten mit Zitat

ka, glabue nicht, außerdem will ichs ja mit ner list machen Wink
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 10.09.2005, 11:44    Titel: Antworten mit Zitat

std::list::sort

was ist damit?
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 10.09.2005, 12:06    Titel: Antworten mit Zitat

CPP:
// list_sort.cpp
// compile with: /EHsc
#include <list>
#include <iostream>

int main( )
{
   using namespace std;
   list <int> c1;
   list <int>::iterator c1_Iter;
   
   c1.push_back( 20 );
   c1.push_back( 10 );
   c1.push_back( 30 );

   cout << "Before sorting: c1 =";
   for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
      cout << " " << *c1_Iter;
   cout << endl;

   c1.sort( );
   cout << "After sorting c1 =";
   for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
      cout << " " << *c1_Iter;
   cout << endl;

   c1.sort( greater<int>( ) );
   cout << "After sorting with 'greater than' operation, c1 =";
   for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
      cout << " " << *c1_Iter;
   cout << endl;
}


Also, NUR sort() funktinoiert nicht, gibt lustige, komische Fehler. Und das Sort mit dem parameter den kapier ich net, was ich da angeben kann. Es wäre sehrfein wenn ich:
CPP:
struct Struktur
{
 int i1;
 int i2;
};
std::list<Struktur> Liste;
Liste::sort("Liste nach Struktur.i2 sorteiren");

machen könnte.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 10.09.2005, 12:11    Titel: Antworten mit Zitat

Für das sort ohne Parameter musst du den < operator (oder wars der > ? ) für deine Struktur überladen, ansonsten musst du halt ne Vergleichsfunktion angeben.
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 10.09.2005, 12:15    Titel: Antworten mit Zitat

Jonathan_Klein hat Folgendes geschrieben:
ka, glabue nicht, außerdem will ichs ja mit ner list machen Wink

Begründung?
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 10.09.2005, 12:21    Titel: Antworten mit Zitat

wenn ich die Struktur mit dem Operator ausrüsten will, muss ich den dann net zur Klasse machen?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 10.09.2005, 12:36    Titel: Antworten mit Zitat

Jonathan_Klein hat Folgendes geschrieben:
wenn ich die Struktur mit dem Operator ausrüsten will, muss ich den dann net zur Klasse machen?


Nein,.

CPP:
bool operator < (const deine_struct& a, const deine_struct& b)
{

...
}

_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 10.09.2005, 13:03    Titel: Antworten mit Zitat

[quote="OLiver"]
Jonathan_Klein hat Folgendes geschrieben:
wenn ich die Struktur mit dem Operator ausrüsten will, muss ich den dann net zur Klasse machen?


Braucht man auch nicht, OLiver... mit einer struct kannst du alles machen, was du auch mit einer Klasse tun kannst, nur dass in einer struct grundsätzlich erstmal alles public ist.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dragon
Super JLI'ler


Alter: 38
Anmeldedatum: 24.05.2004
Beiträge: 340
Wohnort: Sachsen
Medaillen: Keine

BeitragVerfasst am: 10.09.2005, 14:42    Titel: Antworten mit Zitat

ist doch ganz easy Wink

CPP:
#include <iostream>
#include <list>
#include <algorithm>
#include <string>

struct Person
{
   int nr;
   std::string name;
};

struct SortPersonByNr
{
   bool operator()(const Person& rhs, const Person& lhs)
   {
      return rhs.nr < lhs.nr;
   }
};

int main()
{
   std::list<Person> personen;
   std::list<Person>::iterator it;

   Person p;
   p.nr = 1234;
   p.name = "Sven";
   personen.push_back(p);

   p.nr = 3432;
   p.name = "Max";
   personen.push_back(p);

   p.nr = 554;
   p.name = "Nek";
   personen.push_back(p);

   std::cout << "Vor dem Sortieren" << std::endl;
   for(it = personen.begin(); it != personen.end(); it++)
      std::cout << (*it).nr << '\t' << (*it).name << std::endl;

   std::cout << "Liste wird sortiert ..." << std::flush;
   personen.sort(SortPersonByNr());
   std::cout << "fertig!" << std::endl;

   std::cout << "Nach dem Sortieren" << std::endl;
   for(it = personen.begin(); it != personen.end(); it++)
      std::cout << (*it).nr << '\t' << (*it).name << std::endl;

   std::cin.sync();
   std::cin.get();

   return 0;
}


mfg dragon
_________________
Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 10.09.2005, 15:38    Titel: Antworten mit Zitat

Zitat:

Braucht man auch nicht, OLiver... mit einer struct kannst du alles machen, was du auch mit einer Klasse tun kannst, nur dass in einer struct grundsätzlich erstmal alles public ist.


[krümelkack]
Sicher, aber er hat gefragt, ob er das machen muss und müssen tut er es nicht. Wink
[/krümelkack]
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.09.2005, 07:48    Titel: Antworten mit Zitat

OLiver hat Folgendes geschrieben:
Zitat:

Braucht man auch nicht, OLiver... mit einer struct kannst du alles machen, was du auch mit einer Klasse tun kannst, nur dass in einer struct grundsätzlich erstmal alles public ist.


[krümelkack]
Sicher, aber er hat gefragt, ob er das machen muss und müssen tut er es nicht. :wink:
[/krümelkack]


Es geht darum was du gepostet hast. Man kann den Operator in die struct nehmen ohne eine Klasse daraus zu machen. Man muss keine globale Funktion draus machen so wie du das vorgeschlagen hast.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 11.09.2005, 11:05    Titel: Antworten mit Zitat

hm, aber ich meine, ne Klasse ist ja eigentlich ne Struktur mit Methoden...
Also, ich hab jetzt einfach mal "struct" durch "class" umgetauscht, und den < Operator hinzugefügt und jetzt geht es. Danke für die flinke Hilfe.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum