2012-07-17 10 views
5

Non so se ho un semplice refuso da qualche parte, ma sto riscontrando problemi nell'ordinamento di una deque di tuple.Sorting deque of boost tuples

Quindi, il mio deque assomiglia a questo:

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

E poi devo la mia chiamata per ordinare:

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

E la mia funzione di ordinamento:

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); 
} 

ciò che accade è che ottengo errori in stl_heap.h e stl_algo.h. Ad esempio,

tipo di oggetto chiamato '<bound member function type>' non è una funzione o parametro di funzione.


Edit:

Per chiarimenti, questo è tutto che si svolgono all'interno di membri privati ​​di una classe.

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

    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(), msg_sort_criteria); 
    } 
} 
+1

è 'msg_sort_criteria' una funzione libera o una funzione membro? Se il primo, è necessario mostrare più codice; se quest'ultimo, rendilo 'static' e cambia' sort (messages.begin(), messages.end(), msg_sort_criteria); 'a' sort (messages.begin(), messages.end(), & myClassName :: msg_sort_criteria); '. – ildjarn

+0

Tutto questo codice è in corso all'interno di membri privati ​​di una classe. Aggiornerò di conseguenza – espais

+0

Stai intenzionalmente ordinando solo dal primo membro della 'tupla'? Se non ti interessa l'ordine degli articoli in cui il primo elemento è uguale puoi semplicemente usare la tupla di default 'operator <' e non preoccuparti affatto di un predicato di ordinamento. –

risposta

1

Per lo più reinserire dal commentare.

Cambia l'implementazione per:

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

grazie signore, ha funzionato come un fascino – espais