在 C++ 中,std::less
是一個函數對象(也稱為比較器或仿函數),它提供了兩個參數的比較操作。默認情況下,std::less
用于比較兩個元素的大小,并返回一個布爾值,表示第一個元素是否小于第二個元素。
要使用 std::less
進行自定義排序,您需要重載 operator()
函數。以下是一個簡單的示例,展示了如何使用 std::less
對一個包含結構體的向量進行自定義排序:
#include<iostream>
#include<vector>
#include<algorithm>
struct Person {
std::string name;
int age;
};
// 自定義比較器
struct CustomLess : public std::less<Person> {
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(), CustomLess());
// 輸出排序后的結果
for (const auto& person : people) {
std::cout<< person.name << ": "<< person.age<< std::endl;
}
return 0;
}
在這個示例中,我們首先定義了一個名為 Person
的結構體,然后創建了一個包含 Person
對象的向量。接下來,我們定義了一個名為 CustomLess
的自定義比較器,該比較器繼承自 std::less<Person>
。在 CustomLess
中,我們重載了 operator()
函數,使其根據 Person
對象的年齡進行比較。
最后,我們使用 std::sort
函數和自定義比較器 CustomLess()
對向量進行排序。運行此程序將輸出按年齡從小到大排序的人員列表。