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#include 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 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
对象。