Sorting deque boot tuples

Not sure if I have a simple typo somewhere, but I ran into problems when sorting code from tuples.

So my deque looks like this:

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

And then I have my sort call:

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

And my sort function:

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

What happens is that I get errors in stl_heap.h and stl_algo.h. For instance,

The called object type ' <bound member function type>' is not a function or function parameter.


Edit:

To clarify, all this happens inside the private members of the class.

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);
  }
}
+5
source share
1 answer

Mostly from comments.

Change your implementation to:

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);
  }
};
+1
source

All Articles