I do not understand well the std::is_sorted
algorithm and its default behaviour. If we look to cppreference, it says that by default std::is_sorted
use
Even if you only have the <
operator you can figure out if two numbers are equivalent not necessarily equal.
if !(first < second) and !(second < first)
then first equivalent to second
In addition, as paxdiablo's solution actually mentioned first, you could implement is_sorted
as going up the list and continually checking for <
not to be true, if it is ever true you stop.
Here is the correct behavior of the function from cplusplus.com
template
bool is_sorted (ForwardIterator first, ForwardIterator last)
{
if (first==last) return true;
ForwardIterator next = first;
while (++next!=last) {
if (*next<*first) // or, if (comp(*next,*first)) for version (2)
return false;
++first;
}
return true;
}