nlohmann::basic_json::operator<=¶
// until C++20
booloperator<=(const_referencelhs,const_referencerhs)noexcept;// (1)
template<typenameScalarType>
booloperator<=(const_referencelhs,constScalarTyperhs)noexcept;// (2)
template<typenameScalarType>
booloperator<=(ScalarTypelhs,constconst_referencerhs)noexcept;// (2)
-
Compares whether one JSON value
lhsis less than or equal to another JSON valuerhsaccording to the following rules:- The comparison always yields
falseif (1) either operand is discarded, or (2) either operand isNaNand the other operand is eitherNaNor any other number. - Otherwise, returns the result of
!(rhs<lhs)(see operator<).
- The comparison always yields
-
Compares whether a JSON value is less than or equal to a scalar or a scalar is less than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.
Template parameters¶
ScalarType- a scalar type according to
std::is_scalar<ScalarType>::value
Parameters¶
lhs(in)- first value to consider
rhs(in)- second value to consider
Return value¶
whether lhs is less than or equal to rhs
Exception safety¶
No-throw guarantee: this function never throws exceptions.
Complexity¶
Linear.
Notes¶
Comparing NaN
NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.
Operator overload resolution
Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.
Examples¶
Example
The example demonstrates comparing several JSON types.
#include<iostream>
#include<nlohmann/json.hpp>
usingjson=nlohmann::json;
intmain()
{
// create several JSON values
jsonarray_1={1,2,3};
jsonarray_2={1,2,4};
jsonobject_1={{"A","a"},{"B","b"}};
jsonobject_2={{"B","b"},{"A","a"}};
jsonnumber_1=17;
jsonnumber_2=17.0000000000001L;
jsonstring_1="foo";
jsonstring_2="bar";
// output values and comparisons
std::cout<<std::boolalpha;
std::cout<<array_1<<" <= "<<array_2<<" "<<(array_1<=array_2)<<'\n';
std::cout<<object_1<<" <= "<<object_2<<" "<<(object_1<=object_2)<<'\n';
std::cout<<number_1<<" <= "<<number_2<<" "<<(number_1<=number_2)<<'\n';
std::cout<<string_1<<" <= "<<string_2<<" "<<(string_1<=string_2)<<'\n';
}
Output:
[1,2,3]<=[1,2,4]true
{"A":"a","B":"b"}<={"A":"a","B":"b"}true
17<=17.0000000000001true
"foo"<="bar"false
See also¶
- operator<=> comparison: 3-way
Version history¶
- Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
- Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.