在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
向量是否已按照年齡升序排列。