Announcement

Collapse
No announcement yet.

Sortierung einer Liste aus Structs

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Sortierung einer Liste aus Structs

    Hallo zusammen,
    ich habe eine STL List aus Structs erstellt und möchte die nun gerne nach verschiedenen Elementen sortieren können.

    Wie das in der doc beschrieben ist bekomme ich das leider nicht hin.
    http://www.cplusplus.com/reference/stl/list/sort/

    ich habe folgenden Code

    queue.h
    Code:
    #ifndef QUEUE_H_
    #define QUEUE_H_
    
    #include "omnetpp.h"
    #include <list>
    #include <algorithm>
    
    class priorityQueue {
    public:
    	struct dataset
    	{
    	    int ApplId;
    	    long data;
    	};
    
    	queue();
    	virtual ~queue();
    	void push(int, long);
    	bool compID(dataset, dataset);
    
    private:
    	std::list<dataset> database;
    	std::list<dataset>::iterator it;
    };
    
    #endif /* QUEUE_H_ */
    queue.cpp
    Code:
    #include "queue.h"
    
    queue::queue() {
    }
    
    void queue::push(int id, long data){
    
    	// create new Dataset
    	dataset newDataset;
    	newDataset.ApplId = id;
    	newDataset.data = data;
    
    	database.push_back(newDataset);
    	database.sort(compID);
    }
    
    bool queue::compID(dataset first,dataset second){
    	if(first.ApplId < second.ApplId) return false;
    	else return true;
    }
    
    queue::~queue() {
    }
    leider bekomme ich jetzt immer die folgende Fehlermeldung:
    Description Resource Path Location Type
    no matching function for call to 'std::list<queue::dataset>::sort(<unresolved overloaded function type>)'

    ich bin für jede Hilfe dankbar.

    Grüße webbolle

  • #2
    Die Sortroutine hat VOID als Rückgabeparameter

    http://www.sgi.com/tech/stl/sort.html
    Christian

    Comment


    • #3
      Hallo Christian,
      danke für deine Antwort.
      An der Stelle wo ich database.sort(compID) aufrufe erwarte ich ja auch keinen Rückgabewert. Die Funktion compID soll nun eigentlich nur für die Suchfunktion den Vergleich schaffen, da sie von sich aus keine zwei structs miteinander vergleichen kann.

      Ich bin mir mit der übergabe von compID nicht so sicher. Kann mir jemand sagen ob das denn so weit stimmt?

      Grüsse webbolle

      Comment


      • #4
        Hallo zusammen,
        ich hab es jetzt endlich hin bekommen. Für die die es interessiert wo der Fehler lag, habe ich jetzt den korrekten Code angehängt.

        in der .h-File muss die Zeile
        Code:
        //	bool compID(dataset, dataset);
        auskommentiert werden, da diese für den sort-Befehl nicht zu der Klasse "queue" gehören darf.

        Die .cpp-File muss wie folgt abgeändert werden:
        Code:
        #include "queue.h"
        
        bool compID(const dataset& first,const dataset& second){
        	if(first.ApplId < second.ApplId) return false;
        	else return true;
        }
        
        queue::queue() {
        }
        
        void queue::push(int id, long data){
        
        	// create new Dataset
        	dataset newDataset;
        	newDataset.ApplId = id;
        	newDataset.data = data;
        
        	database.push_back(newDataset);
        	database.sort(compID);
        }
        
        queue::~queue() {
        }
        Hierdurch wird die Funktion unabhängig von der Klasse und die sort-Funktion kann sie ohne weiteres aufrufen.

        Alternativ kann auch folgende Funktion verwendet werden:
        Code:
        bool compID(dataset first, dataset second){
        	if(first.ApplId < second.ApplId) return false;
        	else return true;
        }
        Hier werden die Variablen "first" und "second" in die Funktion kopiert, dadurch ist der Aufruf wahrscheinlich etwas langsamer.

        Wenn ich da irgendwas falsch verstanden habe, dann korrigiert mich bitte.

        Viele Grüße webbolle

        Comment

        Working...
        X