C++ 的 std::set
是一个关联容器,它包含一组唯一的对象。std::set
中的元素在插入时自动按键排序。键是元素本身,因此每个元素在 std::set
中只能出现一次。
std::set
支持多种数据类型作为其元素,包括但不限于以下几种:
- 基本数据类型:如
int
、float
、double
、char
、bool
等。 - 指针类型:如
int*
、MyClass*
等。但请注意,使用指针作为键时,应确保指向的对象在std::set
的生命周期内保持有效。 - 用户自定义类型:只要这些类型重载了
<
运算符(用于比较元素的大小),就可以作为std::set
的元素。例如,可以定义一个结构体或类,并重载<
运算符以使其能够用作键。 - 其他容器类型:如
std::string
、std::vector
、std::map
等。但需要注意的是,当使用这些容器类型作为键时,std::set
将使用容器中的第一个元素(通常是begin()
返回的元素)作为键进行比较。
下面是一个简单的示例,展示了如何使用自定义类型作为 std::set
的元素:
#include#include struct MyType { int value; MyType(int v) : value(v) {} // 重载 '<' 运算符以用于排序 bool operator<(const MyType& other) const { return value < other.value; } }; int main() { std::set mySet; mySet.insert(MyType(3)); mySet.insert(MyType(1)); mySet.insert(MyType(2)); for (const auto& elem : mySet) { std::cout << elem.value << ' '; } return 0; }
输出:
1 2 3