在std :: sort上使用类方法比较器

时间:2011-10-28 14:14:22

标签: c++ oop sorting methods std

  

可能重复:
  problem sorting using member function as comparator

是否可以在std :: sort中使用类方法作为比较器函数?

例如:

std::sort(list.begin(),list.end(),object->comparator) //Doesn't compile

如果是,我该怎么做?

2 个答案:

答案 0 :(得分:6)

是的,您可以使用boost::bind

#include <iostream>
#include <algorithm>
#include <iterator>
#include <boost/bind.hpp>

struct S {
  bool ascending;
  bool Compare(int lhs, int rhs) {
    return ascending ? (lhs < rhs) : (rhs < lhs);
  }
};

int main () {

  int i[] = { 1, 3, 5, 7, 8, 6, 4, 2 };
  S s;
  s.ascending = true;
  std::sort(i, i+8, boost::bind(&S::Compare, &s, _1, _2));
  std::copy(i, i+8, std::ostream_iterator<int>(std::cout, " "));
  std::cout << "\n";

  s.ascending = false;
  std::sort(i, i+8, boost::bind(&S::Compare, &s, _1, _2));
  std::copy(i, i+8, std::ostream_iterator<int>(std::cout, " "));
  std::cout << "\n";
}

答案 1 :(得分:0)

您需要将该功能作为回调提供:

std::sort(list.begin(),list.end(),object::comparator)

假设您的功能已经static,我没有看到任何其他问题。