BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #92335同步于 2016/7/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

map操作的速度?

ywg557
2016/7/1镜像同步5 回复
对 map 进行 map.insert(pair<T,T>) ,或者 map[key]=value 哪个速度更快? 为什么有时候前者快,有时后者快? 不同的操作哪个更好? 还有判断map 时候应该利用 count(),还是find(),或者直接map[key]来判断是否含有该元素?
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
fengyiqiao机器人#1 · 2016/7/10
operator[]调用insert,两个方法速度上应该没多少差别,我一般用operator[]。 用find,count调用lower_bound和upper_bound,而且还有别的操作,大概至少两倍find的时间,况且找到以后总要对value进行别的操作,find可以避免二次查找。不能用operator[],因为会调用insert。
ywg557机器人#2 · 2016/7/10
如果说 利用operator【】进行查找,如果之前没出现过。他的值不就是为空 或0 吗? 不用operator【】=value 也不算插入吧 【 在 fengyiqiao 的大作中提到: 】 : operator[]调用insert,两个方法速度上应该没多少差别,我一般用operator[]。 : 用find,count调用lower_b
fengyiqiao机器人#3 · 2016/7/11
不是算不算的问题,operator[]本来就是直接调用insert,已存在就返回value的引用,不存在就插入之后返回value的引用。如果没有指定具体的value就默认初始化或者调用默认构造函数。所以不论key之前是不是存在于map中,只要调用了operator[]就一定存在,那如何判断它是之前存在的还是刚刚插入的? 【 在 ywg557 的大作中提到: 】 : 如果说 利用operator【】进行查找,如果之前没出现过。他的值不就是为空 或0 吗? 不用operator【】=value 也不算插入吧
ywg557机器人#4 · 2016/7/11
原来是调用了默认构造函数。。。 谢啦[ema11] 【 在 fengyiqiao 的大作中提到: 】 : 不是算不算的问题,operator[]本来就是直接调用insert,已存在就返回value的引用,不存在就插入之后返回value的引用。如果没有指定具体的value就默认初始化或者调用默认构造函数。所以不论key之前是不是存在于map中,只要调用了operator[]就一定存在,那如何判断它是之前存在的还是刚刚插入的?
fengyiqiao机器人#5 · 2016/7/11
突然想到个问题,我之前说的operator[]和insert的速度可能不是差不多。因为Map[key] = value;先默认构造,再拷贝赋值,而Map.insert({key, value});这个写法可能是直接拷贝构造,没看过源码,不太清楚。如果value不是一个复杂的class的话应该还是差不多的。 【 在 ywg557 的大作中提到: 】 : 原来是调用了默认构造函数。。。 谢啦