"严格地"是指"没有相同的元素".
is_sorted(v.begin(), v.end(), std::less<>())
Run Code Online (Sandbox Code Playgroud)
不符合我的目标,因为它对于像这样的范围返回true 1,2,2,4,5.
is_sorted(v.begin(), v.end(), std::less_equal<>())
Run Code Online (Sandbox Code Playgroud)
将根据这里给出的实现工作,但不幸的是is_sorted要求Compare谓词是严格的排序(Compare(a,a)必须是假的),std::less_equal当然不是.
那么我应该为此目的编写自己的循环吗?
引用评论流:
std::adjacent_find与std::greater_equal应该做的伎俩-它会找到比下一个大于或等于第一个元素; 如果不存在这样的元素,则序列严格增加.
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v1{0, 1, 2, 3, 40, 41};
auto i2 = std::adjacent_find(v1.begin(), v1.end(), std::greater_equal<int>());
if (i2 == v1.end()) {
std::cout << "The entire vector is sorted in strictly ascending order\n";
} else {
std::cout << "The vector is not sorted\n";
}
}
Run Code Online (Sandbox Code Playgroud)
示例源自http://en.cppreference.com/w/cpp/algorithm/adjacent_find