在 C++ 中,std::set
是一個關聯容器,它包含一組唯一的對象。默認情況下,std::set
使用 operator<
來比較元素,但你可以通過提供自定義的比較函數或自定義類型來實現不同的排序規則。
以下是如何在 C++ 中使用自定義類型作為 std::set
的元素:
struct Person {
std::string name;
int age;
// 自定義比較函數
bool operator<(const Person& other) const {
if (name != other.name) {
return name < other.name;
}
return age < other.age;
}
};
std::set
的元素:#include <iostream>
#include <set>
int main() {
std::set<Person> people;
// 添加元素
people.insert(Person{"Alice", 30});
people.insert(Person{"Bob", 25});
people.insert(Person{"Charlie", 30});
// 遍歷集合
for (const auto& person : people) {
std::cout << person.name << ": " << person.age << std::endl;
}
return 0;
}
在這個例子中,我們定義了一個 Person
結構體,并重載了 <
運算符以便根據 name
和 age
對 Person
對象進行排序。然后,我們將 Person
對象插入到 std::set
中,并使用范圍 for 循環遍歷集合。
注意,由于我們自定義了比較函數,std::set
會根據 Person
對象的 name
和 age
屬性對元素進行排序。在這個例子中,具有相同 name
的 Person
對象將根據其 age
屬性進行排序。