C++ 中 map 和 set 的介绍与使用
在 C++ 中,map
和 set
是标准模板库(STL)中两种常用的关联容器。它们都基于红黑树实现,因此具有良好的平均时间复杂度特性。下面是对它们的介绍和基本使用方法:
map
介绍
map
是一种关联容器,用于存储键值对。其中每个键都是唯一的,并且一个键关联一个对应的值。- 键和值的类型可以是不同的类型。
map
自动对键进行排序,因此元素总是以升序排序。
常用操作
- 插入元素:可以使用
insert
函数或[]
运算符。
std::map<std::string, int> myMap; myMap.insert({"apple", 5}); // 使用 insert myMap["banana"] = 10; // 使用 [] 运算符
- 访问元素:通过
[]
运算符来访问或者修改元素。
int num_apples = myMap["apple"];
- 删除元素:用
erase
函数来删除元素。
myMap.erase("banana");
- 查找元素:
find
函数返回一个迭代器,指向查找到的元素。
auto it = myMap.find("apple"); if (it != myMap.end()) { // 找到了元素 }
- 获取大小:使用
size
函数获取元素个数。
size_t size = myMap.size();
set
介绍
set
是一个集合,存储唯一元素,并且按照特定顺序(默认升序)自动排序。set
中不允许重复元素。
常用操作
- 插入元素:使用
insert
函数。
std::set<int> mySet; mySet.insert(3); mySet.insert(1); // 添加元素
- 删除元素:使用
erase
函数。
mySet.erase(3);
- 查找元素:
find
函数返回一个迭代器,指向查找到的元素。
auto it = mySet.find(1); if (it != mySet.end()) { // 找到了元素 }
- 检查元素是否存在:
count
函数,而结果只能是 0 或 1。
if (mySet.count(1) > 0) { // 1 存在于集合中 }
- 获取大小:使用
size
函数获取集合中元素的个数。
size_t size = mySet.size();
这两种容器通常用于需要快速查找的场景中,因为它们能够在 O(log n) 时间复杂度内进行插入、删除和查找操作。这使得 map
和 set
在许多算法和数据处理任务中极为有用。