排序提升元组的双端队列

the*_*e_e 5 c++ sorting boost stl boost-tuples

不确定我是否有某个简单的拼写错误,但我在排序元组的问题时遇到了问题.

所以,我的deque看起来像这样:

std::deque<boost::tuple<unsigned int, unsigned int> > messages;
Run Code Online (Sandbox Code Playgroud)

然后我打电话给我:

sort(messages.begin(), messages.end(), msg_sort_criteria);
Run Code Online (Sandbox Code Playgroud)

我的排序功能:

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);
}
Run Code Online (Sandbox Code Playgroud)

发生的事情是我在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);
  }
}
Run Code Online (Sandbox Code Playgroud)

ild*_*arn 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);
  }
};
Run Code Online (Sandbox Code Playgroud)