C++ set map
时间: 2025-05-08 22:15:03 AIGC 浏览: 29
### C++ 中 `set` 和 `map` 的用法与区别
#### 定义与基本特性
在 C++ 标准模板库(STL)中,`std::set` 是一种关联容器,用于存储唯一的键值并自动保持有序排列[^3]。而 `std::map` 则是一种键值对的集合,其中每个键都唯一,并且会按照键的顺序进行排序[^4]。
#### 数据结构基础
- **Set**: 基于平衡二叉树实现(通常是红黑树),因此其内部元素始终处于升序或降序状态。它不允许重复元素存在。
- **Map**: 同样基于平衡二叉树实现,但它的节点由一对 key-value 组成。Key 部分负责排序,Value 存储数据。
#### 主要功能对比
| 特性 | Set | Map |
|--------------|------------------------------|-----------------------------|
| **用途** | 仅保存不重复的关键字 | 关联关键字与其对应的值 |
| **插入操作** | 插入单个元素 | 插入键值对 |
| **查找效率** | 对数时间复杂度 O(log n) | 对数时间复杂度 O(log n) |
| **删除操作** | 删除指定元素 | 删除特定键及其对应值 |
#### 使用示例代码
以下是关于如何使用 `set` 和 `map` 的简单例子:
```cpp
#include <iostream>
#include <set>
#include <map>
int main() {
std::set<int> my_set;
my_set.insert(10);
my_set.insert(20);
for(auto it = my_set.begin(); it != my_set.end(); ++it){
std::cout << *it << '\n';
}
std::map<std::string, int> my_map;
my_map["apple"] = 1;
my_map["banana"] = 2;
for(auto const& pair : my_map){
std::cout << pair.first << ": " << pair.second << '\n';
}
}
```
上述程序展示了向 `set` 添加整型数值以及遍历它们的方法;同时也演示了怎样往 `map` 加入字符串作为key、整数作为value的过程,并打印这些键值对[^5]。
#### 性能考量
由于两者均采用自平衡二叉搜索树来组织内部数据项,所以对于大多数标准操作——比如插入(insert),移除(erase), 查找(find)—的时间成本都是O(log N)[^6]。
---
阅读全文
相关推荐

















