在C++中,std::is_sorted
函数用于检查一个范围内的元素是否已经按照升序排列。对于自定义类型,要使std::is_sorted
能够正确工作,需要提供适当的比较操作。这可以通过重载operator<
或提供自定义比较函数来实现。
下面是一个示例,展示了如何为自定义类型Person
提供比较操作,并使用std::is_sorted
检查一个Person
对象的向量是否已排序:
#include<iostream>
#include<vector>
#include<algorithm>
class Person {
public:
std::string name;
int age;
// 重载小于运算符
bool operator<(const Person& other) const {
return age< other.age;
}
};
int main() {
std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}, {"Charlie", 35}};
// 使用自定义比较操作检查是否已排序
bool is_sorted = std::is_sorted(people.begin(), people.end());
if (is_sorted) {
std::cout << "The vector is sorted."<< std::endl;
} else {
std::cout << "The vector is not sorted."<< std::endl;
}
return 0;
}
在这个示例中,我们为Person
类重载了operator<
,以便根据age
属性进行比较。然后,我们使用std::is_sorted
检查people
向量是否已按照年龄升序排列。
如果你不想重载运算符,也可以提供一个自定义比较函数。下面是一个使用自定义比较函数的示例:
#include<iostream>
#include<vector>
#include<algorithm>
class Person {
public:
std::string name;
int age;
};
// 自定义比较函数
bool compare_by_age(const Person& a, const Person& b) {
return a.age < b.age;
}
int main() {
std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}, {"Charlie", 35}};
// 使用自定义比较函数检查是否已排序
bool is_sorted = std::is_sorted(people.begin(), people.end(), compare_by_age);
if (is_sorted) {
std::cout << "The vector is sorted."<< std::endl;
} else {
std::cout << "The vector is not sorted."<< std::endl;
}
return 0;
}
在这个示例中,我们定义了一个名为compare_by_age
的自定义比较函数,并将其作为参数传递给std::is_sorted
。这样,我们就可以在不重载运算符的情况下检查people
向量是否已按照年龄升序排列。