在 C++ 中,std::set
是一个关联容器,它包含一组唯一的对象。当你将一个元素插入到 std::set
中时,std::set
会自动处理元素的复制。具体来说,std::set
会使用提供的比较函数(默认为 std::less<Key>
)来确保集合中的元素始终保持有序。
当你向 std::set
插入一个元素时,std::set
会执行以下操作:
std::set
会比较新元素和集合中的现有元素。如果新元素较小,则替换现有元素。否则,新元素将被忽略。在这个过程中,std::set
会创建元素的副本(如果元素是一个复杂的数据结构),并将其插入到集合中。这意味着 std::set
中的元素实际上是原始元素的副本。
下面是一个简单的示例,演示了如何在 C++ 中使用 std::set
:
#include <iostream>
#include <set>
struct Person {
std::string name;
int age;
Person(const std::string& n, int a) : name(n), age(a) {}
};
bool comparePersons(const Person& p1, const Person& p2) {
return p1.name < p2.name;
}
int main() {
std::set<Person, decltype(&comparePersons)> people(comparePersons);
people.insert(Person("Alice", 30));
people.insert(Person("Bob", 25));
people.insert(Person("Charlie", 35));
for (const auto& person : people) {
std::cout << person.name << ": " << person.age << std::endl;
}
return 0;
}
在这个示例中,我们定义了一个名为 Person
的结构体,并创建了一个 std::set
,其中包含 Person
对象。我们使用自定义的比较函数 comparePersons
来根据 name
属性对 Person
对象进行排序。当我们向集合中插入 Person
对象时,std::set
会自动处理对象的复制和排序。