在周末,我将参加一个节目比赛,我想知道我应该使用std::向量还是std:map?我会简单地将它们用作数组,但我不知道哪一个更好(主要是基本操作的速度)?
我在堆栈溢出上看到了这张照片,我不知道这两者的主要区别是什么.

图片表明矢量更快..。我真的不知道该怎么办,请帮帮我!我只需要像数组一样使用它们,但要有动态大小.提前谢谢你,
编辑I可能会得到一个二维整数数组(例如,一个城市的地图或一个地形图,我会得到一些可以用图形算法或动态规划来解决的问题),所以我需要的是:写入、读取“表”的特定单元格、搜索特定的值,我猜就这样了。我听说std::map不会在内存中找到完整的N*M大小的表,但是我会按值来实现它的值.那么,它是否真的可以使用更少的内存?
,对不起,这么傻,但是我从来没有真正的老师,我从我的身上学到了所有我所知道的。我刚开始学习数据结构(2-3棵树、红黑树、二项式堆等等)。
发布于 2013-01-09 20:47:54
我想知道我应该使用
std::vector还是std::map?
,它完全取决于您想要/需要做什么。如果您需要从用户输入2个数字,然后添加它们并显示结果,那么使用向量或地图是没有意义的。
但是,如果您需要存储一个对象数组(或原语),通常需要使用std::vector。如果您需要存储键和值,那么这就是std::map发明的目的。你问的问题太宽泛了,所以它实际上很难回答,但你可能还是会明白这个想法。
此外,您可以得到一些关于代码的灵感,您不应该尝试复制here。
发布于 2013-01-09 20:45:29
地图不是数组,而是一棵红黑的二叉树.因此,它不是一个好的选择作为一个基本的数组存储。
向量可以用作数组,并且可能提供类似于数组的访问速度(虽然它可能依赖于实现,但大多数(如果不是全部)将被实现为数组)。向量的优点不是速度,而是它为您管理内存。
另外,您可能需要阅读不同的数据结构。它将有助于扩展您的编程技能。
发布于 2013-01-09 22:48:13
您指的是字符数组的C意义中的数组还是数学意义上的数组?你的数组是多维的吗?
如果您指的是数学类型,您可能会发现,将数组存储在堆中的空间中,并通过执行一个新的、较大的malloc,然后再加上一个memcopy和一个没有旧错误区域的大小来调整大小,可能比使用std:容器更快。
不要被std愚弄:建设者听起来就像他们分配了你需要的空间行走。在构造函数时,它们会破坏太多的空间,所以如果不这样做的话,它们就不必像以前那样频繁地增长。当他们不得不成长的时候,他们又一次为了同样的理由而要求额外的空间。当您必须扩展您的空间时,请记住使用最大的数据项移动数据。假设有64位总线和字符一次移动一个,并且编译器不够聪明为您优化这一点,那么1/64长的移动速度要比N个字节快。
https://stackoverflow.com/questions/14246087
复制相似问题