2 chuwen chuwen 于 2016.05.10 20:51 提问

求问在使用c++ map时的效率问题

一个数组a[10]需要做一些计算,比如,a[2]- a[1],a[8]- a[4].还有其他的一种数组元素做差的计算,现在的问题是我发现程序中数组元素做差的就是那么几个,比如我前面写的那两个。所以实际情况是这些做差的大部分时间是重复的,因此我想用一个map,把这些做差的元素序号以及做差的值存储起来,然后每次在做差之前先查找map如果找到就不用做差了。可是这样是不是效率反而低了?还不如直接两个数组元素做差来的快。

5个回答

chuwen
chuwen   2016.05.10 21:09
已采纳

求解答,谢谢啦。我是觉得在这种情况下,是不是用了map反而会降低效率。

CSDNXIAON
CSDNXIAON   2016.05.10 21:03

map 效率问题
使用map和hash_map的效率问题
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

ljheee
ljheee   Rxr 2016.05.10 21:11

得看具体问题啊,使用STL吧

chuwen
chuwen 具体问题就是,我想用map<key(i,j),a[i]- a[j]>这个map储存一些数组元素的差,并且程序的其他部分需要频繁使用这些差。我想问的是我直接在程序里面计算a[i]- a[j]快,还是利用map先存储再查找快,现在手头的情况是这些数组元素差有很多重复的。比如我总共需要计算200次数组元素的差,里面a[2]-a[1]就被重复计算了100次,a[8]-a[4]被计算了80次等等。
一年多之前 回复
taohe_0
taohe_0   2016.05.10 21:42

直接相减就好了,这样使用map绝对是浪费。
做差运算一条CPU指令就完成了,转成map,又是存储、又是查找,这是多少CPU指令才能完成的事情?!
除非a[10]是复杂的对象,减号运算符中有大量复杂的运算。

chuwen
chuwen 好的,谢谢你
一年多之前 回复
t3580236
t3580236   2016.05.13 16:53

弄个静态局部变量保存运算的结果, 如果参与运算的两项有任何一项发生改变, 则更新静态变量的值. 这样可以尽量避免操作map. 节省CPU.

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!