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