本文将针对关联容器的操作进行总结。
关联容器有两大类,map和set,一个用于索引,一个用于判断存在性。在C++中常用四个关联容器,map & unordered_map, set & unordered_set, 其中unordered表示不排序,如果没有排序需求,尽量使用unordered提升效率。
map & unordered_map
map和multimap的底层是通过红黑树实现的,而unordered_map底层为哈希表
map相关操作
插入
map的插入共有两种形式:
1 | accountMap.insert(pair<int,int>(100,100)); //插入键值对,不能覆盖 |
查找
通过键是否存在,查找键值对是否在map中
1 | auto iter = accountMap.find(100); |
删除
1 | iter = accountMap.find(100); |
Set & unordered_set
set和multiset底层采用红黑树实现,而unordered_set采用哈希表。
Set相关操作
基本操作
初始化
1 | vector<int> ivec; |
增删查
1 | // 查找 |
其他常用操作
- 判断两个集合交集
set_intersection
函数
函数模板为:
1 | template <class InputIterator1, class InputIterator2, class OutputIterator> |
使用注意事项:待比较的两个集合必须先排序,才能正确判断交集。
例题:LeetCode 350
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
1 | 输入: nums1 = [1,2,2,1], nums2 = [2,2] |
示例 2:
1 | 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] |
1 | class Solution { |
扩展操作
自定义哈希函数
在使用unordered_set和unordered_map时,我们可以使用自定义哈希函数,一个自定义哈希函数编写方式如下:
1 | struct KeyHash { |