4.3 KiB
nlohmann::basic_json::operator<=
// until C++20
bool operator<=(const_reference lhs, const_reference rhs) noexcept; // (1)
template<typename ScalarType>
bool operator<=(const_reference lhs, const ScalarType rhs) noexcept(/* see below */); // (2)
template<typename ScalarType>
bool operator<=(ScalarType lhs, const const_reference rhs) noexcept(/* see below */); // (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.
- No-throw guarantee if converting the scalar to a JSON value cannot throw, as for numbers, Booleans, and
nullptr; the function isnoexceptexactly in that case. Otherwise, it throws what the conversion throws, for examplestd::bad_allocwhen converting a string, orout_of_range.410for an enum value not mapped byNLOHMANN_JSON_SERIALIZE_ENUM_STRICT.
Complexity
Linear.
Notes
Comparing NaN
NaN values are unordered within the domain of numbers. The following comparisons all yield false:
- Comparing a
NaNwith itself. - Comparing a
NaNwith anotherNaN. - Comparing a
NaNand any other number.
Operator overload resolution
Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.
Deprecation
If JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON is defined to 1, the library declares a member bool operator<=(const_reference rhs) const noexcept in C++20 mode to emulate the legacy comparison of discarded values. This member is deprecated since version 3.11.0, together with the legacy comparison behavior.
See the migration guide for how to update existing code.
Examples
Example
The example demonstrates comparing several JSON types.
#include <iostream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main()
{
// create several JSON values
json array_1 = {1, 2, 3};
json array_2 = {1, 2, 4};
json object_1 = {{"A", "a"}, {"B", "b"}};
json object_2 = {{"B", "b"}, {"A", "a"}};
json number_1 = 17;
json number_2 = 17.0000000000001L;
json string_1 = "foo";
json string_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.0000000000001 true
"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. Made conditionally
noexceptin version 3.13.0 unreleased; before, a throwing conversion calledstd::terminate.