map与set

引言

这篇文章里介绍的东西都是STL的容器,包括map/set/unordered_map/unordered_set/multimap/multiset.

上述容器中mapset的底层结构是带有迭代器的红黑树,其他容器的底层结构都是采用 链地址法实现的哈希表

map

map的功能是将键值对形式的数据存储起来,建立一对一的映射关系,其底层结构为红黑树,这意味着数据是有序的

键值对(key:value):设有两个数据,一个被称为key,一个称为value,而keyvalue存在一一对应的映射关系。

举个栗子:你的身份证号与你就是一组键值对,学号与学生就是一组键值对。我们可以将键值对中的键理解为值的标志或者关键字,只要知道键值对中的键,我们就能知道它的值。

map的主要常用方法

方法名功能
begin()返回指向map头部的迭代器
end()返回指向map尾部的迭代器
insert()向map中插入一个键值对
erase()删除一个键值对
clear()清除容器中的有效数据
empty()判断容器是否为空
size()返回容器中的元素数目
find()返回容器中查找目标的迭代器,不存在则返回end()
count()返回目标键值对在容器中的出现次数,0/1
swap()交换两个容器中的数据
rbegin()反向迭代器,返回指向容器尾部的迭代器
rend()反向迭代器,返回指向容器头部的迭代器
operator[]运算符重载,支持读取,修改,插入键值对

模拟实现

map的模拟实现其实重头戏在于底层结构的实现——具有迭代器的红黑树
map的模拟实现

set

set也是STL的一个容器,其功能就是数学意义上的集合。最主要的体现就是可以对数据进行去重工作。

set的主要常用方法

方法名功能
begin()返回指向容器头部的迭代器
rbegin()返回指向容器尾部的迭代器
end()返回指向容器尾部的迭代器
rend()返回指向容器头部的迭代器
size()返回容器中有效元素的数目
empty()判断容器是否为空
clear()清空容器
find()返回容器中查找目标的迭代器,不存在则返回end()
insert()向容器中插入一个元素
erase()删除一个元素

模拟实现

set的模拟实现

map与set的类似容器对比

容器底层结构数据是否有序映射关系
map红黑树有序一对一
set红黑树有序一对一
multiset红黑树有序一对多
multimap红黑树有序一对多
unordered_set哈希无序一对一
unordered_map哈希无序一对一
unordered_multiset哈希无序一对多
unordered_multimap哈希无序一对多

【note】:
一对一:一个key对应一个value
一对多:一个key对应若干value

模拟实现

unorder_map/unordered_set/multimap/multiset模拟实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值