2012-07-17 13 views
5

Nicht sicher, ob ich irgendwo einen einfachen Tippfehler habe, aber ich habe Probleme beim Sortieren einer Tupelgruppe.Sortieren von Boost-Tupel

So sieht mein deque wie folgt aus:

std::deque<boost::tuple<unsigned int, unsigned int> > messages; 

Und dann habe ich meinen Ruf zu sortieren:

sort(messages.begin(), messages.end(), msg_sort_criteria); 

Und meine Sortierfunktion:

bool msg_sort_criteria(boost::tuple<unsigned int, unsigned int> lhs, boost::tuple<unsigned int, unsigned int> rhs) 
{ 
    return boost::get<1>(lhs) < boost::get<1>(rhs); 
} 

Was passiert ist dass ich Fehler in stl_heap.h und stl_algo.h bekomme. Zum Beispiel

Genannt Objekttyp ‚<bound member function type>‘ ist keine Funktion oder Funktionsparameter.


Edit:

Zur Verdeutlichung ist das alles findet im privaten Mitglieder einer Klasse.

+1

Ist 'msg_sort_criteria' eine freie Funktion oder eine Member-Funktion? Wenn der ehemalige, müssen Sie mehr Code zeigen; Wenn letzteres, mache es 'statisch' und ändere' sort (messages.begin(), messages.end(), msg_sort_criteria); 'zu sortieren (messages.begin(), messages.end(), & myClassName :: msg_sort_criteria); '. – ildjarn

+0

All dieser Code findet innerhalb privater Mitglieder einer Klasse statt. Ich werde entsprechend aktualisieren – espais

+0

Willst du absichtlich nur nach dem ersten Mitglied des 'Tupel' sortieren? Wenn Sie sich nicht um die Reihenfolge der Elemente kümmern, bei denen das erste Element gleich ist, können Sie einfach das Standardtupel 'operator <' verwenden und sich überhaupt nicht um ein Sortierprädikat kümmern. –

Antwort

1

Meistens reposting von kommentieren.

Ändern Sie Ihre Implementierung:

class Messages::MessageImpl{ 
private: 
    std::deque<boost::tuple<unsigned int, unsigned int> > messages; 

    static bool msg_sort_criteria(boost::tuple<unsigned int, unsigned int> lhs, 
           boost::tuple<unsigned int, unsigned int> rhs) 
    { 
    return boost::get<1>(lhs) < boost::get<1>(rhs); 
    } 

    void fn() 
    { 
    sort(msg_queue_.begin(), msg_queue_.end(), &MessageImpl::msg_sort_criteria); 
    } 
}; 
+0

danke, mein Herr, arbeitete wie ein Charme – espais