关联容器
关联容器定义
-
初始化
map
和set
1
2
3
4
5
6
7
8
9//默认初始化
map<int,string>mapa; //默认初始化为空容器,int为关键字类型,string为值类型
set<int>seta; //默认初始化为空容器,int为关键字类型
//列表初始化,值可以转换为容器所需类型即可
set<string>setb = {"a","b","c"};
map<string,string>mapb = {{"a","b"},{"c","d"}};
//初始化为同类型容器的拷贝 -
初始化
multimap
和multiset
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33```
### 关联容器的Value_type
- `map`和`unordered_map`的`Value_type`为`pair`类型
### 关联容器操作
#### 添加元素
- `c.insert(v)`:`v`是`value_type`类型的对象
#### 删除元素
- `c.erase(k)`:从`c`中删除所有关键字为`k`的元素。返回`size_type`值,指出删除元素的数量。
#### 查找元素
- `c.count(k)`:返回容器中关键字等于`k`的元素数量。
- `c.find(k)`:返回指向第一个关键字为`k`的元素的迭代器。如果没有,返回尾后迭代器。
#### 访问与修改
##### 使用迭代器
- 关联容器的迭代器解引用之后为`value_type`类型,`map`的`value_type`为`pair`类型。其`first`成员保存了`const`的关键字,`second`成员保存关键字对应的值
```C++
auto iter = Map.begin();
cout << iter->first << endl; //打印关键字
cout << iter->first << endl; //打印对应的值
iter->first = 1; //错误,关键字是const类型,无法改变
iter->second = 1; //正确,可以通过迭代器修改关键字对应的值