Сортировка 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);
  }
};
Другие вопросы по тегам