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);
}
}
è '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
Tutto questo codice è in corso all'interno di membri privati di una classe. Aggiornerò di conseguenza – espais
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. –