C++ 有什么东西可以把C++;比较器类型?

C++ 有什么东西可以把C++;比较器类型?,c++,templates,comparator,c++-standard-library,C++,Templates,Comparator,C++ Standard Library,例如,如果我传入了std::less,我希望它创建一个行为等于std::greater的新比较器。用于模板中 可以启用类似于std::map的语法的东西(除非我要查找的东西存在,否则它不是它的名称)。这是否存在?有std::not\fn,: 创建一个转发调用包装器,该包装器返回它所持有的可调用对象的否定 然而,在这种情况下,它将产生一个具有std::greater_equal功能的比较器,而不是std::greater。此外,该类型与std::greater_equal不同 例如: auto g

例如,如果我传入了
std::less
,我希望它创建一个行为等于
std::greater
的新比较器。用于模板中


可以启用类似于
std::map
的语法的东西(除非我要查找的东西存在,否则它不是它的名称)。这是否存在?

std::not\fn
,:

创建一个转发调用包装器,该包装器返回它所持有的可调用对象的否定

然而,在这种情况下,它将产生一个具有
std::greater_equal
功能的比较器,而不是
std::greater
。此外,该类型与
std::greater_equal
不同

例如:

auto greater_eq = std::not_fn(std::less<>());

这也可以扩展到支持任意数量的参数,只翻转前两个参数(使其类似于Haskell的
flip
),以及支持参数的完美转发,但这些功能可能会使简洁的示例变得相当复杂,并且比较器不需要这些功能。

有些人会说“更少”是“更大或相等”,而不是“更大”。这是真的,但理想情况下我更喜欢的是“更少->更大”。尽管我想知道它是否以任何形式存在。
auto flip = [](auto fun) {
    return [fun = std::move(fun)]
           (const auto& arg1, const auto& arg2)
    {
        return fun(arg2, arg1);
    };
};

auto greater = flip(std::less<>());