是的,C++ 的 set
和 map
容器可以處理自定義類型。為了使它們能夠處理自定義類型,您需要提供適當的比較函數或比較對象,以便容器可以對元素進行排序和查找。
對于 set
,您可以提供一個比較函數,該函數接受兩個自定義類型的對象作為參數,并返回一個布爾值,表示它們是否相等。例如:
struct Person {
std::string name;
int age;
};
bool comparePersons(const Person& p1, const Person& p2) {
return p1.name < p2.name;
}
int main() {
std::set<Person, decltype(comparePersons)> people(comparePersons);
// ...
}
在這個例子中,我們定義了一個 Person
結構體,并提供了一個比較函數 comparePersons
,用于比較兩個 Person
對象。然后,我們創建了一個 set
容器,并將比較函數作為第二個模板參數傳遞給它。這樣,set
就可以使用我們提供的比較函數來處理 Person
類型了。
對于 map
,您需要提供一個比較對象,該對象必須滿足 operator<
的重載版本,以便容器可以對鍵進行排序。例如:
struct Person {
std::string name;
int age;
};
bool operator<(const Person& p1, const Person& p2) {
return p1.name < p2.name;
}
int main() {
std::map<Person, std::string> people;
// ...
}
在這個例子中,我們重載了 Person
類型的 operator<
,以便可以對它們進行比較。然后,我們創建了一個 map
容器,并將 Person
類型作為鍵類型傳遞給它。這樣,map
就可以使用我們提供的比較操作符來處理 Person
類型了。