c++ - 传递一个成员函数作为 C++ 标准库算法的比较运算符

标签 c++ c++11 standard-library

在我的代码中我现在有类似的东西

    Foo bar;
    std::unordered_set<Foo>::iterator minElement =
      std::min_element(std::begin(mySet),
                       std::end(mySet),
                       [&bar](Foo const &lhs, Foo const &rhs) {
                         return bar.myWeakLessOperator(lhs, rhs);
                       });

我想知道是否存在通过直接传递成员函数 myWeakLessOperator(不是静态的)而不是编写一个 lambda 函数来进行调用来简化它的方法。

我想得到类似的东西

    Foo bar;
    std::unordered_set<Foo>::iterator minElement =
      std::min_element(std::begin(mySet),
                       std::end(mySet),
                       /* something that rely to */ bar.myWeakLessOperator);

知道是否可行以及如何实现吗?

最佳答案

一个可能的解决方案是使用满足 Compare 的结构Foo 内部:

class Foo 
{
public:
    struct WeakLessOperator
    {
        bool operator()(const Foo& a, const Foo& b)
        {
            // implementation - take care of meeting requirements of Compare
            return true;
        }
    };
    WeakLessOperator myWeakLessOperator;
};

Foo bar;

auto minElement =
    std::min_element(std::begin(mySet),
                     std::end(mySet),
                     bar.myWeakLessOperator);

关于c++ - 传递一个成员函数作为 C++ 标准库算法的比较运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53325193/

相关文章:

c++ - trim 不是标准 c/c++ 库的一部分吗?

c++ - 错误 : Conversion from integral type to pointer type requires reinterpret_cast, C 风格转换或函数风格转换

c++ - 如何使 NUnit 断言失败显示 C++ 的行号?

c++ - boost 文件系统中的段错误?

c++ - 我为什么要使用 unique_lock<> 包装器?

C++11 - 如何使用 shared_ptr vector 将此对象插入 priority_queue?

c++ - 编译器会自动优化对数学函数的重复调用吗?

c++ - c++-try block 之后是否需要立即编写catch block ?

python - python 标准库类/方法的综合引用

c++ - 我应该什么时候使用 std::bind?