Skip to content

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)
  1. Compares whether one JSON value lhs is less than or equal to another JSON value rhs according to the following rules:

    • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
    • Otherwise, returns the result of !(rhs<lhs) (see operator<).
  2. 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

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.

AltStyle によって変換されたページ (->オリジナル) /