背景

使用sort函数经常需要自定义排序方法与权重,不想overload比较方法就需要向sort中传入第三个compare参数。

实现

bind

对于比较复杂的可以使用std::bind构建一个新的函数对象,固化某些参数并使用placeholder接收外部参数

vector<int> v = { 1, 8, 7, 4, 3, 6, 2, 5 };
PrintVector(v);
auto greater_binded = bind(greater<int>(), placeholders::_1, placeholders::_2);
sort(v.begin(), v.end(), greater_binded);

注意,如果在class中使用了调用了非静态成员函数进行bind,则需要显式传入this指针。

lambda

对于比较简单的比较则更推荐使用lambda表达式构建匿名函数,例如

std::sort(s.begin(), s.end(), [](int a, int b) {
        return a > b;
    });

参考

c++ - usage of this pointer in std::bind - Stack Overflow
bind - C++ Reference

相关文章:

  • 2021-07-13
  • 2022-12-23
  • 2021-11-10
  • 2021-10-24
  • 2021-09-28
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-13
  • 2022-12-23
  • 2021-11-06
  • 2022-12-23
  • 2022-12-23
  • 2021-05-21
  • 2021-10-25
相关资源
相似解决方案