在 C++ 中,less
是一個函數對象(也稱為比較器或仿函數),用于執行“小于”操作。它通常用于排序和查找算法,如 std::sort
和 std::find
。less
函數對象在
less
的基本語法如下:
template<class T>
struct less {
bool operator()(const T& a, const T& b) const;
};
這里有一個簡單的例子,展示了如何使用 std::less
:
#include<iostream>
#include<functional>
int main() {
int a = 5, b = 10;
std::less<int> less_op;
if (less_op(a, b)) {
std::cout << "a is less than b"<< std::endl;
} else {
std::cout << "a is not less than b"<< std::endl;
}
return 0;
}
less
操作符與其他比較操作符(如 <
、>
、==
等)的主要區別在于,less
是一個可調用對象,可以傳遞給需要比較器的算法。這使得你可以更靈活地處理自定義類型,而不需要重載比較操作符。
例如,假設你有一個自定義類型 Person
,并希望根據年齡對其進行排序。你可以創建一個自定義比較器,如下所示:
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
struct Person {
std::string name;
int age;
};
struct AgeLess {
bool operator()(const Person& a, const Person& b) const {
return a.age < b.age;
}
};
int main() {
std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}, {"Charlie", 35}};
std::sort(people.begin(), people.end(), AgeLess());
for (const auto& person : people) {
std::cout<< person.name << ": "<< person.age<< std::endl;
}
return 0;
}
在這個例子中,我們使用了一個自定義比較器 AgeLess
來根據年齡對 Person
對象進行排序。這樣,我們可以將比較器傳遞給 std::sort
算法,而無需修改 Person
類或重載任何比較操作符。