在 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 會自動處理對象的復制和排序。