Сортировка deque буст-кортежей
Не уверен, что у меня где-то есть простая опечатка, но я сталкиваюсь с проблемами при сортировке набора кортежей.
Итак, мой deque выглядит так:
std::deque<boost::tuple<unsigned int, unsigned int> > messages;
И тогда у меня есть вызов для сортировки:
sort(messages.begin(), messages.end(), msg_sort_criteria);
И моя функция сортировки:
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);
}
Что происходит, что я получаю ошибки в stl_heap.h и stl_algo.h. Например,
Вызываемый тип объекта
<bound member function type>
'не является функцией или параметром функции.
Редактировать:
Для пояснения, все это происходит в частных членах класса.
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 ответ
Решение
В основном репосты из комментариев.
Измените вашу реализацию на:
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);
}
};