📜  c++ 检查向量是否已排序 - C++ (1)

📅  最后修改于: 2023-12-03 14:59:49.201000             🧑  作者: Mango

C++ 检查向量是否已排序

在C++中,我们可以使用STL库中的is_sorted函数来检查向量是否已排序。该函数可以处理不同类型的数据,包括自定义类型,同时也支持自定义比较函数。

函数原型
template <class ForwardIterator>
bool is_sorted (ForwardIterator first, ForwardIterator last);

template <class ForwardIterator, class Compare>
bool is_sorted (ForwardIterator first, ForwardIterator last, Compare comp);
参数解释
  • first:向量的起始迭代器
  • last:向量的结束迭代器
  • comp:可选参数,定义用于比较元素的函数,应接受两个参数,如果第一个参数小于第二个参数则返回true
返回值

is_sorted函数返回一个布尔值,如果第一个指针和最后一个指针之间的元素按照升序排列,则返回true,否则返回false

代码示例

以下是一个简单的C++代码示例,演示如何使用is_sorted函数检查向量是否已排序。

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
    vector<int> v1{1,2,3,4};
    vector<int> v2{4,3,2,1};

    if(is_sorted(v1.begin(), v1.end()))
        cout << "v1 is sorted" << endl;
    else
        cout << "v1 is not sorted" << endl;

    if(is_sorted(v2.begin(), v2.end()))
        cout << "v2 is sorted" << endl;
    else
        cout << "v2 is not sorted" << endl;

    return 0;
}

输出:

v1 is sorted
v2 is not sorted

以上示例中,我们创建了两个向量,v1和v2,其中v1已经按升序排序,v2没有排序。我们使用is_sorted函数检查这两个向量是否已排序,并输出结果。

自定义比较函数

有时我们可能需要使用自定义的比较函数来检查向量是否已排序。例如,如果我们想按照降序检查向量是否已排序,可以创建一个自定义的比较函数来代替默认的升序比较函数。

以下是一个示例代码,演示如何使用自定义比较函数来检查向量是否已排序。

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

bool compare(int a, int b)
{
    return a > b;
}

int main()
{
    vector<int> v1{4,3,2,1};
    vector<int> v2{1,2,3,4};

    if(is_sorted(v1.begin(), v1.end(), compare))
        cout << "v1 is sorted in descending order" << endl;
    else
        cout << "v1 is not sorted in descending order" << endl;

    if(is_sorted(v2.begin(), v2.end(), compare))
        cout << "v2 is sorted in descending order" << endl;
    else
        cout << "v2 is not sorted in descending order" << endl;

    return 0;
}

输出:

v1 is sorted in descending order
v2 is not sorted in descending order

以上示例中,我们创建了两个向量,v1和v2,其中v1按照降序排序,v2按照升序排序。我们使用is_sorted函数和自定义比较函数来检查这两个向量是否已排序,并输出结果。