2012-07-17 8 views
5

No estoy seguro de si tengo un error tipográfico en alguna parte, pero estoy teniendo problemas al ordenar un deque de tuplas.Ordenando la deque de las tuplas de impulso

lo tanto, mi deque se parece a esto:

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

Y luego tengo mi llamada para ordenar:

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

Y mi función de clasificación:

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

Lo que sucede es que obtengo errores en stl_heap.hy stl_algo.h Por ejemplo,

Llamado tipo de objeto '<bound member function type>' no es una función o parámetro de función .


Editar:

Para mayor claridad, esto es todo lo que tiene lugar dentro de los miembros privados de una clase.

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

es 'msg_sort_criteria' una función libre o una función miembro? Si el primero, necesita mostrar más código; si es lo último, conviértalo 'static' y cambie' sort (messages.begin(), messages.end(), msg_sort_criteria); 'a' sort (messages.begin(), messages.end(), & myClassName :: msg_sort_criteria); '. – ildjarn

+0

Todo este código se lleva a cabo dentro de miembros privados de una clase. Voy a actualizar en consecuencia – espais

+0

¿Está intencionalmente solo clasificando por el primer miembro de la 'tupla'? Si no le importa el orden de los elementos donde el primer elemento es igual, puede simplemente usar el operador de tupla predeterminado '' y no molestarse en absoluto con un predicado de ordenación. –

Respuesta

1

Mayormente reposting from comment.

Cambiar la aplicación a:

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

gracias señor, trabajó como un encanto – espais