阅读量:130
在 C++ 中,std::set 是一个关联容器,它包含一组唯一的对象。当你将一个元素插入到 std::set 中时,std::set 会自动处理元素的复制。具体来说,std::set 会使用提供的比较函数(默认为 std::less)来确保集合中的元素始终保持有序。
当你向 std::set 插入一个元素时,std::set 会执行以下操作:
- 检查集合中是否已经存在该元素。如果不存在,则将元素插入集合。
- 如果元素已经存在,
std::set会比较新元素和集合中的现有元素。如果新元素较小,则替换现有元素。否则,新元素将被忽略。
在这个过程中,std::set 会创建元素的副本(如果元素是一个复杂的数据结构),并将其插入到集合中。这意味着 std::set 中的元素实际上是原始元素的副本。
下面是一个简单的示例,演示了如何在 C++ 中使用 std::set:
#include
#include
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 class="hljs-function">int main() {
std::setdecltype (&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 class="hljs-string">": " << person class="hljs-keyword">return 0;
}
在这个示例中,我们定义了一个名为 Person 的结构体,并创建了一个 std::set,其中包含 Person 对象。我们使用自定义的比较函数 comparePersons 来根据 name 属性对 Person 对象进行排序。当我们向集合中插入 Person 对象时,std::set 会自动处理对象的复制和排序。