From cppreference.com
Defined in header
template<classPredicate>structbinary_negate:publicstd::binary_function<Predicate::first_argument_type,Predicate::second_argument_type,bool>;(until C++11)template<classPredicate>structbinary_negate;(since C++11)
(deprecated in C++17)
(removed in C++20)std::binary_negate is a wrapper function object returning the complement of the binary predicate it holds.
The binary predicate type must define two member types, first_argument_type and second_argument_type, that are convertible to the predicate's parameter types. The function objects obtained from
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
, std::bit_xor,
,
,
,
, or from a call to
have these types defined, as are function objects derived from the deprecated
.
std::binary_negate objects are easily constructed with helper function
.
Member types
Type Definition first_argument_typePredicate::first_argument_typesecond_argument_typePredicate::second_argument_typeresult_typeboolMember functions
(constructor)
constructs a new binary_negate object with the supplied predicate
(public member function)operator()
returns the logical complement of the result of a call to the stored predicate
(public member function)std::binary_negate::binary_negate
explicitbinary_negate(Predicateconst&pred);(constexpr since C++14)Constructs a std::binary_negate function object with the stored predicate pred.
Parameters
pred - predicate function object std::binary_negate::operator()
booloperator()(first_argument_typeconst&x,second_argument_typeconst&y)const;(constexpr since C++14)Returns the logical complement of the result of calling pred(x,y).
Parameters
x - first argument to pass through to predicate y - second argument to pass through to predicate Return value
The logical complement of the result of calling pred(x,y).
Example
Run this code
#include<algorithm>#include<cstddef>#include<functional>#include<iostream>#include<vector>structsame:std::binary_function<int,int,bool>{booloperator()(inta,intb)const{returna==b;}};intmain(){std::vector<int>v1;for(inti=0;i<7;++i)v1.push_back(i);std::vector<int>v2(v1.size());std::reverse_copy(v1.begin(),v1.end(),v2.begin());std::vector<bool>v3(v1.size());std::binary_negate<same>not_same((same()));// C++11 solution:// std::function<bool (int, int)> not_same =// [](int x, int y) -> bool { return !same()(x, y); };std::transform(v1.begin(),v1.end(),v2.begin(),v3.begin(),not_same);std::cout.setf(std::ios_base::boolalpha);for(std::size_ti=0;i!=v1.size();++i)std::cout<<v1[i]<<" != "<<v2[i]<<" : "<<v3[i]<<'\n';}Output:
0 != 6 : true 1 != 5 : true 2 != 4 : true 3 != 3 : false 4 != 2 : true 5 != 1 : true 6 != 0 : true See also
(deprecated in C++11)(removed in C++17)
adaptor-compatible binary function base class
(class template)
(C++11)
copyable wrapper of any copy constructible callable object
(class template)
(C++23)
move-only wrapper of any callable object that supports qualifiers in a given call signature
(class template)
(deprecated in C++17)(removed in C++20)
constructs custom
object
(function template)
(deprecated in C++11)(removed in C++17)
creates an adaptor-compatible function object wrapper from a pointer to function
(function template)
(deprecated in C++17)(removed in C++20)
wrapper function object returning the complement of the unary predicate it holds
(class template)