C++ 中的 std::set
是一個關聯容器,它包含一組唯一的對象。std::set
中的元素在插入時自動按鍵排序。鍵是元素本身,因此每個元素都必須提供比較運算符(operator<
),以便確定其順序。
std::set
支持以下數據類型:
基本數據類型:如 int
、float
、double
、char
、bool
等。對于這些基本數據類型,std::set
會使用它們的默認比較運算符。
指針類型:如 int*
、float*
等。對于指針類型,std::set
會使用指針的地址進行比較。
用戶自定義類型:你可以使用任何滿足以下條件的類或結構體作為 std::set
的元素:
<
)。std::set
使用正確的版本。通常,最好只定義一個比較運算符重載函數,并使用 std::less
作為默認比較方式。復合類型:如 std::pair
、std::tuple
等。這些類型也可以作為 std::set
的元素,但需要確保它們提供了適當的比較運算符。
下面是一個簡單的示例,展示了如何使用 std::set
存儲自定義類型的元素:
#include <iostream>
#include <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;
}
};
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
結構體重載了小于運算符,以便 std::set
可以正確地比較和排序 Person
對象。