C++中的std::is_sorted

C++中的std::is_sorted

C++函数 std::is_sorted 检查范围 [first, last] 中的元素是否按升序排列。元素使用 ** < ** 操作符进行比较。
std::is_sorted 有两个变体:

不使用二元谓词

bool is_sorted( ForwardIt first, ForwardIt last );
first, last : 要检查的元素范围
返回值 :
true: 如果元素按非递减顺序排序。
false: 任何按递增顺序排列的元素。

例子 :

给定大小为 n 的容器,以及位于 [0 … n] 之间的范围,编写一个程序来检查它是否按升序排列。数组允许相等的值,两个连续的等值被认为是排序的。

输入 : 2 5 9 4      /* 范围 = 3 */
输出 : 排序在给定范围内。

输入 : 3 5 1 9     /* 范围 = 3 */
输出 : 在给定范围内未排序。
// CPP program to illustrate
// std::is_sorted
// without binary predicate
#include <iostream>
#include <algorithm>
 
// Driver Code
int main()
{
    int A[] = { 10, 11, 15, 12 };
 
    // Index 0 to 2
    int range1 = 3;
 
    // Index 0 to 3
    int range2 = 4;
 
    // Condition if container is sorted or not in range1
    if (std::is_sorted(A, A + range1)) {
        std::cout << "在范围内排序 : " << range1 << std::endl;
    } else {
        std::cout << "在范围内未排序 : " << range1 << std::endl;
    }
 
    // Condition if container is sorted or not in range2
    if (std::is_sorted(A, A + range2)) {
        std::cout << "在范围内排序 : " << range2 << std::endl;
    } else {
        std::cout << "在范围内未排序 : " << range2 << std::endl;
    }
    return 0;
}  

输出 :

在范围内排序 : 3
在范围内未排序 : 4

我们在这里讨论了其他方法。

使用二元谓词

bool is_sorted (ForwardIt first, ForwardIt last, Compare comp);
first, last : 要检查的元素范围
comp : 二元谓词
返回值 :
true: 如果元素按非递减顺序排序。
false: 任何按递增顺序排列的元素。

例子 :

给定仅由字符组成的字符串。检查字符是否按排序顺序排列。此外,比较时忽略大小写,即 ‘f’ > ‘A’。

输入 : AHZP
输出 : 未排序

输入 : Boy
输出 : 排序
// CPP程序,用于演示std::is_sorted和二元谓词
#include <iostream>
#include <algorithm>
 
using namespace std;
 
// 二元谓词
bool ignore_case(char a, char b)
{
    // 将两个字符转换成小写字母并检查 a 是否小于等于 b
    return (tolower(a) <= tolower(b));
}
 
// 检查字符串是否已按字母顺序排序
bool check_if_sorted(string str)
{
    // 使用二元谓词 ignore_case 调用is_sorted函数
    return is_sorted(str.begin(), str.end(), ignore_case);
}
 
// 主函数
int main()
{
    // 要检查的字符串
    string str = "tOY";
 
    // 函数返回 true,字符串已排序
    if (check_if_sorted(str)) {
        cout << "Sorted";
    }
    // 函数返回 false,字符串未排序
    else {
        cout << "Not sorted";
    }
 
    return 0;
}  

输出结果:

Not sorted

时间复杂度: 这个复杂度是线性的,它比较一对元素直到找到一个不匹配的元素或者到达结尾。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程