C++的set和get能否處理自定義類型

c++
小樊
81
2024-09-25 01:40:15
欄目: 編程語言

是的,C++ 的 setmap 容器可以處理自定義類型。為了使它們能夠處理自定義類型,您需要提供適當(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 類型了。

0