map,set

set

set的特性是:所有元素都会根据元素的键值自动被排序。set的元素不像map那样可以拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set不允许两个元素有相同的键值

不可以通过迭代器改变set的元素。因为set元素值就是键值,关系到set元素的排列规则。如果任意改变set的元素值,会严重破坏set组织。set<T>::iterator被定义为底层RB-TREE的const_iterator,杜绝写入操作。

set拥有与list相同的某些性质:当客户端对它进行元素新增操作(insert)或删除操作时(erase)时,操作之前的所有迭代器,在操作完成之后都依然有效

map

map的特性是,所有元素都会根据元素的键值自动被排序。map的所有元素都是pair,同时拥有实值(value)和键值(key)。pair的第一元素被视为键值,第二元素被视为实值。map不允许两个元素拥有相同的键值。

不可以更改map元素的键值,因为map元素的键值关系到map元素的排列规则。任意改变map元素键值将会严重破坏map组织。但是可以修改元素的实值。因为map元素的实值并不影响map元素的排列规则。

map拥有和list相同的某些性质:当客户端对它进行元素新增操作(insert)或删除操作(erase)时。操作之前的所有迭代器,在操作完成之后都依然有效

map的插入方式有几种?

//insert函数插入pair数据
mp.insert(pair<int, string>(1, "ttt"));
//insert函数插入value_type数据
mp.insert(map<int,string>::value_type(1, "ttt"));
//insert函数使用make_pair()函数
mp.insert(make_pair(1, "ttt"));
//下标访问方式插入数据
mp[1] = "ttt";

map中[]和find的区别

  • map的下标运算符的作用是:将键值作为下标去执行查找,并返回对应的实值;如果不存在这个键值,就将一个具有该键值和实值类型的默认值插入map中
  • map的find函数:用键值执行查找,找到了返回该位置的迭代器;如果不存在,就返回尾迭代器;

unordered_map和map的区别和应用场景

map支持键值的自动排序,底层机制是红黑树,红黑树的查询和维护,时间复杂度均为O(logn)。但是空间占用比较大,因为每个节点要保持父节点,孩子节点及颜色的信息。

unordered_map底层机制是哈希表。查询时间复杂度是O(1),维护时间与bucket桶所维护的list长度有关,建立hash表耗时较大

map适用于有序数据的应用场景,unordered_map适用于高效查询的应用场景。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值