JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=570c7e6f96226e3ee61e9bbc93c8d241Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Sortieralgo für ne <list>
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 10.03.2006, 16:09    Titel: Sortieralgo für ne <list> Antworten mit Zitat

Hi,

hab mal ne kurze Frage zur std::list. Hab gehört, es gibt in <algorithm> oder so einen Weg, sich selbst eine Sortierfunktion für die Elemente einer Liste zu programmieren, ähnlich wie bei qsort() wo man eine solche angeben muss. Ich brauche das, weil die std::list<>::sort()-Funktion ja nur nach int-Werten sortiert. Kennt einer dazu ein gutes Tutorial, einen Link oder kann das einer schnell erklären? Thx im Voraus

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
OLiver
Super JLI'ler


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

BeitragVerfasst am: 10.03.2006, 16:16    Titel: Antworten mit Zitat

Reicht da nicht, wenn man den < oder > überläd? Ansonsten guck dir mal Bubble- oder Quicksort an.
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 10.03.2006, 16:25    Titel: Antworten mit Zitat

Hi!

Doch das reicht:

CPP:
#include <list>
#include <fstream>
#include <iostream>

class MyInt
{
private:
   unsigned long val;

public:
   MyInt()
      : val( 0 )
   {}

   MyInt( unsigned long v )
      : val( v )
   {}

   bool operator < ( const MyInt &other )
   {
      return val < other.val;
   }

   friend std::ostream &operator<<( std::ostream &o, const MyInt &obj )
   {
      o << obj.val;
      return o;
   }
};

int main( int argc, char **argv )
{
   std::list< MyInt > l;

   l.push_back( MyInt( 10 ) );
   l.push_back( MyInt( 60 ) );
   l.push_back( MyInt( 20 ) );

   l.sort();

   for ( std::list< MyInt >::iterator i = l.begin(); i != l.end(); ++i )
   {
      std::cout << *i << std::endl;
   }

   l.clear();

   return 0;
}


Oder:

CPP:
#include <list>
#include <fstream>
#include <iostream>

class MyInt
{
private:
   unsigned long val;

public:
   friend bool SortPredicate( const MyInt &, const MyInt & );

   MyInt()
      : val( 0 )
   {}

   MyInt( unsigned long v )
      : val( v )
   {}

   friend std::ostream &operator<<( std::ostream &o, const MyInt &obj )
   {
      o << obj.val;
      return o;
   }
};

bool SortPredicate( const MyInt &lhs, const MyInt &rhs )
{
   return lhs.val < rhs.val;
}

int main( int argc, char **argv )
{
   std::list< MyInt > l;

   l.push_back( MyInt( 10 ) );
   l.push_back( MyInt( 60 ) );
   l.push_back( MyInt( 20 ) );

   l.sort( SortPredicate );

   for ( std::list< MyInt >::iterator i = l.begin(); i != l.end(); ++i )
   {
      std::cout << *i << std::endl;
   }

   l.clear();
   std::cin.get();

   return 0;
}


grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



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

BeitragVerfasst am: 10.03.2006, 17:58    Titel: Antworten mit Zitat

DirectXer
Die STL bietet da einen eigenen Sortalgo basiered auf dem BubbleSort, kannst Dir ja sicherlich denken wie lam das ist, da schreibt man sich was eigenes!

Nimm besser Qualität: http://trash.germangamedev.de/heapsort.pdf

OLiver
Und was hat man dann? BubbleSort, einen total lamarschigen Sortalgo und Quicksort? Quicksort mit rekursion, na klasse, bei 22.000 Elementen geht dir so dermaßen das Programm flöten, grandios!

und operator < bzw. > überladen geht nur bei Listen wo man keine Pointer abspeicher, sonst vergleicht man die Pointeradresse.

Besser: Heapsort!

David
Ja reicht NUR bei Listen die keine Pointer managen.

p.s.: Es handelt sich bei dieser Präsentation um eine der viele Gruppenprojektarbeiten, also nix sonderliches. Auch der Code ist nicht mehr aktuell Wink Aber egal, er läuft und geht ab wie sonst was.
_________________
'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
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 10.03.2006, 18:06    Titel: Antworten mit Zitat

Hoi Patrick, versuche dich mal bitte an einem etwas freundlicherem Ton, wäre der Atmosphäre hier im Forum halt etwas zuträglicher.

Fragen dementsprechend bitte per PM.
_________________
"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
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 10.03.2006, 18:15    Titel: Antworten mit Zitat

was genau meinst du mit "nicht mehr aktuell"?
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



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

BeitragVerfasst am: 10.03.2006, 18:17    Titel: Antworten mit Zitat

HotAcid
Halbes Jahr alt (dazu ist der Code in einem Saufgelage entstanden, war net mehr ganz nüchtern Very Happy), an diversen Stellen optimierter, aber sonst noch passabel.
_________________
'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
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 10.03.2006, 18:28    Titel: Antworten mit Zitat

ok, danke Smile
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 10.03.2006, 19:00    Titel: Antworten mit Zitat

@patrick:

danke, genau das was ich suchte. ich benutze nämlich wirklich pointer, mit vererbung und allem un so. Very Happy

@David und @Oliver

auch danke an euch.

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 10.03.2006, 20:08    Titel: Antworten mit Zitat

Patrick hat Folgendes geschrieben:
DirectXer
Die STL bietet da einen eigenen Sortalgo basiered auf dem BubbleSort, kannst Dir ja sicherlich denken wie lam das ist, da schreibt man sich was eigenes!


Tut mir leid dich zu korrigieren, aber die STL Leute waren sicher nicht so dämlich Bubblesort zu verwenden... wenn du dir den Code mal anschaust, wirst du feststellen, dass es ein Introsort ist. ;)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



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

BeitragVerfasst am: 10.03.2006, 20:38    Titel: Antworten mit Zitat

Hazel
Kommt drauf an, vom Standard her ist kein festgelegter Algo dafür benutzt. Generell kann man davon ausgehen das es BubbleSort ist.
_________________
'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
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 10.03.2006, 22:11    Titel: Antworten mit Zitat

Keine Ahnung, welche STL du benutzt, aber...

Hab nochmal nachgesehen... STLPort ist auf jeden Fall Introsort(QuickSort der bei zu starker Rekursion auf Heap-Sort ausweicht). Das was bei meinem Visual C++ dabei ist, ist Insertionsort, was garantiert auch kein Bubblesort ist. Arbeite mit Visual C++ .net 2003 aber bis zu neueren Versionen werden sie sicher keinen Rückschritt gemacht haben sondern eher auch auf Introsort umgestiegen sein, wenn überhaupt.

Ich kann mir auch garnicht vorstellen, dass Leute die eine effiziente Template Lib zusammenstellen soetwas hernehmen wie Bubblesort... das hab ich in Klasse 10 an der Schule durchgenommen als einfachsten sortieralgo. Und sogar die einfache C-Funktion sort() benutzt Quicksort für C-Arrays.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



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

BeitragVerfasst am: 10.03.2006, 22:15    Titel: Antworten mit Zitat

Hazel
Frage am Rande, wie kann ein Quicksort einfach mal "mitten drin" auf einen HeapSort zurückgreifen?????????????????????
_________________
'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
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 10.03.2006, 22:34    Titel: Antworten mit Zitat

Patrick hat Folgendes geschrieben:
Hazel
Frage am Rande, wie kann ein Quicksort einfach mal "mitten drin" auf einen HeapSort zurückgreifen?????????????????????

Was soll die Frage?
Wahrscheinlich wird die Funktion vorher anhand der Anzahl der zu sortierenden Elemente die effektivste Methode zum Sortieren auswählen.

Man kann ja schon vorher abschätzen, dass die Rekursion bei 10000 Elementen stärker bei Quicksort sein wird, als bei Heapsort.
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.03.2006, 22:38    Titel: Antworten mit Zitat

KI
Ich rede von "Mitten Drin" nicht vom Anfang an. Und bei Rekursion geht es nicht um die Langsamheit sondern um die Rekursionstiefe.
_________________
'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
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    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