c++中set函数
时间: 2025-05-01 08:36:54 浏览: 27
### C++ 中 `std::set` 的相关函数及其用法
在 C++ 标准库中,`std::set` 是一种关联容器,用于存储唯一的键值并自动保持有序。它基于平衡二叉树(通常是红黑树)实现,因此提供了高效的查找、插入和删除操作。
以下是 `std::set` 常见的成员函数以及它们的具体用法:
#### 1. 插入元素
- **`insert(value)`**: 向集合中插入一个新元素。
```cpp
std::set<int> mySet;
mySet.insert(10); // 插入整数 10
```
#### 2. 删除元素
- **`erase(key)`**: 根据指定的关键字删除元素。
- **`erase(iterator)`**: 使用迭代器删除特定位置的元素。
```cpp
mySet.erase(10); // 删除关键字为 10 的元素
auto it = mySet.begin();
mySet.erase(it); // 删除第一个元素
```
#### 3. 查找元素
- **`find(key)`**: 返回指向找到元素的迭代器;如果未找到,则返回 `end()`。
```cpp
if (mySet.find(10) != mySet.end()) {
std::cout << "Element found!" << std::endl;
}
```
#### 4. 判断是否存在
- **`count(key)`**: 如果存在该关键字则返回 1,否则返回 0。
```cpp
int exists = mySet.count(10);
if (exists) {
std::cout << "Key exists." << std::endl;
}
```
#### 5. 获取大小
- **`size()`**: 返回当前集合中的元素数量。
```cpp
size_t setSize = mySet.size(); // 获取集合大小
```
#### 6. 清空集合
- **`clear()`**: 移除所有元素,使集合为空。
```cpp
mySet.clear(); // 清空整个集合
```
#### 7. 遍历集合
由于 `std::set` 自动按升序排列其元素,可以通过迭代器遍历来访问这些元素。
```cpp
for (const auto& elem : mySet) {
std::cout << elem << " ";
}
```
#### 8. 比较两个集合
- **`operator==` 和 `operator!=`**: 检查两个集合是否相等或不相等。
```cpp
std::set<int> anotherSet = {1, 2, 3};
bool isEqual = (mySet == anotherSet); // 比较两集合是否相同
```
---
### 完整示例代码
以下是一个综合使用的例子:
```cpp
#include <iostream>
#include <set>
int main() {
std::set<int> numbers;
// 插入元素
numbers.insert(5);
numbers.insert(3);
numbers.insert(9);
// 打印集合内容
std::cout << "Elements in set: ";
for (auto num : numbers) {
std::cout << num << " "; // 输出顺序为 3 5 9
}
// 查找元素
if (numbers.find(5) != numbers.end()) {
std::cout << "\nFound element 5.\n";
}
// 删除元素
numbers.erase(3);
std::cout << "After erasing 3:\n";
for (auto num : numbers) {
std::cout << num << " "; // 输出顺序为 5 9
}
// 清空集合
numbers.clear();
std::cout << "\nSize after clearing: " << numbers.size() << std::endl; // 大小应为 0
return 0;
}
```
---
### 关于性能特点
`std::set` 提供了对数时间复杂度的操作效率,适用于需要快速查找、插入和删除的应用场景。然而,在某些情况下可能需要权衡空间占用与性能需求[^1]。
阅读全文
相关推荐

















