是的,C++ 的 set
和 map
容器可以處理自定義類型。為了使它們能夠處理自定義類型,您需要提供適當(dāng)?shù)谋容^函數(shù)或比較對(duì)象,以便容器可以對(duì)元素進(jìn)行排序和查找。
對(duì)于 set
,您可以提供一個(gè)比較函數(shù),該函數(shù)接受兩個(gè)自定義類型的對(duì)象作為參數(shù),并返回一個(gè)布爾值,表示它們是否相等。例如:
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);
// ...
}
在這個(gè)例子中,我們定義了一個(gè) Person
結(jié)構(gòu)體,并提供了一個(gè)比較函數(shù) comparePersons
,用于比較兩個(gè) Person
對(duì)象。然后,我們創(chuàng)建了一個(gè) set
容器,并將比較函數(shù)作為第二個(gè)模板參數(shù)傳遞給它。這樣,set
就可以使用我們提供的比較函數(shù)來處理 Person
類型了。
對(duì)于 map
,您需要提供一個(gè)比較對(duì)象,該對(duì)象必須滿足 operator<
的重載版本,以便容器可以對(duì)鍵進(jìn)行排序。例如:
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;
// ...
}
在這個(gè)例子中,我們重載了 Person
類型的 operator<
,以便可以對(duì)它們進(jìn)行比較。然后,我們創(chuàng)建了一個(gè) map
容器,并將 Person
類型作為鍵類型傳遞給它。這樣,map
就可以使用我們提供的比較操作符來處理 Person
類型了。